最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python操作PDF實現(xiàn)制作數(shù)據(jù)報告

 更新時間:2022年12月16日 09:20:41   作者:快快  
Python操作PDF的庫有很多,比如PyPDF2、pdfplumber、PyMuPDF等等。本文將利用FPDF模塊操作PDF實現(xiàn)制作數(shù)據(jù)報告,感興趣的小伙伴可以嘗試一下

大家好,我是朱小五。大家如果看過我的書《快學(xué)Python:自動化辦公輕松實戰(zhàn)》,會發(fā)現(xiàn)Python操作PDF文檔內(nèi)容,主要圍繞PDF文檔的內(nèi)容提取、合并與拆分、加密與解密、添加水印以及不同文檔格式相互轉(zhuǎn)換來展開。

但大家會發(fā)現(xiàn),其中并沒有有太多直接操作PDF并向其寫入的內(nèi)容。這是因為我們更推薦大家Python自動操作word,然后加一步格式轉(zhuǎn)換,而非直接想PDF寫入內(nèi)容。

不過,肯定還是有一部分人是有類似需求的,所以今天給大家分享一個案例:如何用Python操作PDF制作數(shù)據(jù)報告?

FPDF模塊

Python操作PDF的庫有很多,比如PyPDF2、pdfplumber、PyMuPDF等等。不過我們今天要用的是FPDF模塊,它是用于在 Python 中生成 PDF 的最通用、最自由、最直觀的庫之一。為啥說它自由呢,看它的首字母F就知道了。Python中所用到的FPDF是基于PHP版本的FPDF。

FPDF 官方網(wǎng)址:http://www.fpdf.org/

pip?install?FPDF

FPDF模塊使用邏輯非常簡單,直接用幾個小例子學(xué)習(xí)一下。

1、創(chuàng)建PDF,并添加單行文字

我們可以創(chuàng)建一個單元格cell(),然后將文本放入其中,這種方法更適合對齊或居中變量或動態(tài)文本。

from?fpdf?import?FPDF

pdf?=?FPDF()
pdf.add_page()
pdf.set_font('Arial',?'B',?16)
pdf.cell(40,?10,'Hello,?World!')
pdf.output('test_01.pdf',?'F')

輸出結(jié)果:

2、其他操作

pdf.set_font('SIMYOU',size=10)??#?設(shè)置字體,字體,加粗,字號
pdf.set_text_color(120,120,120)?#?設(shè)置顏色,采用RGB方式

pdf.text(x,?y,?txt)?#?插入文本的另一種方式

pdf.add_page()?#?增加一頁

pdf.ln()?#?插入新行

pdf.multi_cell(0,5,"插入多行")?#?插入多行

pdf.image('01.jpg',?100,?50,?40)?#?插入圖片,100,50表示圖片左上角的XY坐標(biāo),40表示圖片的大小

3、實現(xiàn)字體的中文支持

FPDF庫自帶的字體非常少,想使用中文就需要導(dǎo)入支持中文的字體,可以使用add_font()方法。

pdf.add_font('幼圓字體','',r'C:\Windows\Fonts\SIMYOU.TTF',True)
pdf.set_font('幼圓字體',?'',?14)?#?設(shè)置字體為標(biāo)準(zhǔn)幼圓,size為14

注意,上面代碼中的字體文件路徑要根據(jù)自己的電腦實際存放位置更改。

此外,使用中文會有報錯warnings.warn,直接無視就好。如果想解決,也可以參考下文補充內(nèi)容

操作PDF制作數(shù)據(jù)報告

下面,直接展開案例:如何用Python操作PDF制作數(shù)據(jù)報告[2]?

由于我們這個小案例涉及繪制圖形+寫入圖表,所以使用了seaborn、pandas模塊。懶得自己打字,所以又使用了Faker模塊,干脆模擬生成一些“假”的文字段落,方便直接插入到PDF文檔中。

在交互式環(huán)境中輸入如下命令(部分代碼):

pdf.cell(w=30,?h=ch,?txt="Date:?",?ln=0)
pdf.cell(w=30,?h=ch,?txt="01/10/2022",?ln=1)
pdf.cell(w=30,?h=ch,?txt="Author:?",?ln=0)
pdf.cell(w=30,?h=ch,?txt="公眾號:快學(xué)Python",?ln=1)

pdf.ln(ch)
pdf.cell(0,?5,'聽我說謝謝你')?#?單行文字
pdf.ln(ch)
#?隨機生成文字段落
pdf.multi_cell(w=0,?h=10,?txt=fake.sentence(nb_words=50))
pdf.ln(ch)
pdf.image('./example_chart.png',?x?=?10,?y?=?None,?w?=?100,?h?=?0,?type?=?'PNG',?link?=?'')
pdf.ln(ch)
pdf.multi_cell(w=0,?h=5,?txt=fake.sentence(nb_words=50))
pdf.ln(ch)

#?表格?Header
pdf.cell(40,?ch,?'Feature?1',?1,?0,?'C')
pdf.cell(40,?ch,?'Feature?2',?1,?1,?'C')

#?表格內(nèi)容
for?i?in?range(0,?len(df)):
????pdf.cell(40,?ch,?df['feature?1'].iloc[i],?1,?0,?'C')???
????pdf.cell(40,?ch,?df['feature?2'].iloc[i].astype(str),?1,?1,?'C')

打開導(dǎo)出的PDF文檔,如下圖所示。

這樣我們就實現(xiàn)用Python操作PDF制作了一張“偽”數(shù)據(jù)報告,而我們在實際使用中則可以根據(jù)需求向其中插入文本、數(shù)字、圖表等等內(nèi)容。

補充

fpdf解決中文報錯的方法

將字體從C:\Windows\Fonts目錄下拷貝到了fpdf文件夾。如果打印的字是'你好世界'時不會報錯。但是換為其他字時就報cmap value too big/small

import fpdf
pdf =fpdf.FPDF()
pdf.add_font('STSONG','',r'D:\test\venv\Lib\site-packages\fpdf\STSONG.TTF',True)
#此句話添加字體標(biāo)準(zhǔn)宋體
pdf.add_page()
pdf.set_font('STSONG', '', 35)#設(shè)置字體為標(biāo)準(zhǔn)宋體,size為35
pdf.cell(100, 100,'跟我說謝謝你')
pdf.output('helloword_01.pdf')

報錯:

D:\test\venv\Scripts\python.exe D:/test/pdf操作/fpdftest.py 
D:\test\venv\lib\site-packages\fpdf\ttfonts.py:670: UserWarning: cmap value too big/small: -35825
  warnings.warn("cmap value too big/small: %s" % cm)
D:\test\venv\lib\site-packages\fpdf\ttfonts.py:670: UserWarning: cmap value too big/small: -35869
  warnings.warn("cmap value too big/small: %s" % cm)
D:\test\venv\lib\site-packages\fpdf\ttfonts.py:670: UserWarning: cmap value too big/small: -36318
  warnings.warn("cmap value too big/small: %s" % cm)
Traceback (most recent call last):
  File "D:\test\pdf操作\fpdftest.py", line 12, in <module>
    pdf.output('helloword_01.pdf')
  File "D:\test\venv\lib\site-packages\fpdf\fpdf.py", line 1079, in output
    f=open(name,'wb')
PermissionError: [Errno 13] Permission denied: 'helloword_01.pdf'
Process finished with exit code 1

點擊報錯中的ttfonts.py,將else及其后邊幾句注釋掉后,竟然不報錯了,并且能正常生成中文。

cmap.append(0)    # Mapping for last character
cmapstr = b('')
for cm in cmap:
    if cm >= 0:
        cmapstr += pack(">H", cm) 
    # else:
    #     try:
    #         cmapstr += pack(">h", cm)
    #     except:
    #         warnings.warn("cmap value too big/small: %s" % cm)
    #         cmapstr += pack(">H", -cm)

到此這篇關(guān)于Python操作PDF實現(xiàn)制作數(shù)據(jù)報告的文章就介紹到這了,更多相關(guān)Python PDF數(shù)據(jù)報告內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django實現(xiàn)靜態(tài)文件緩存到云服務(wù)的操作方法

    Django實現(xiàn)靜態(tài)文件緩存到云服務(wù)的操作方法

    這篇文章主要介紹了Django實現(xiàn)靜態(tài)文件緩存到云服務(wù)的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Python通過樸素貝葉斯和LSTM分別實現(xiàn)新聞文本分類

    Python通過樸素貝葉斯和LSTM分別實現(xiàn)新聞文本分類

    樸素貝葉斯法(Naive Bayes model)是基于貝葉斯定理與特征條件獨立假設(shè)的分類方法。LSTM則是一種時間循環(huán)神經(jīng)網(wǎng)絡(luò),適合于處理和預(yù)測時間序列中間隔和延遲相對較長的重要事件。本文將通過這兩個方法分別實現(xiàn)新聞文本分類,需要的可以參考一下
    2021-12-12
  • python語言中有算法嗎

    python語言中有算法嗎

    在本篇文章里小編給大家整理的是一篇關(guān)于python里算法的相關(guān)知識點內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python多線程如何同時處理多個文件

    Python多線程如何同時處理多個文件

    這篇文章主要介紹了Python多線程如何同時處理多個文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python 實現(xiàn)簡單的電話本功能

    Python 實現(xiàn)簡單的電話本功能

    這篇文章主要介紹了Python 實現(xiàn)簡單的電話本功能的相關(guān)資料,包括添加聯(lián)系人信息,查找姓名顯示聯(lián)系人,存儲聯(lián)系人到 TXT 文檔等內(nèi)容,十分的細(xì)致,有需要的小伙伴可以參考下
    2015-08-08
  • Python調(diào)用百度根據(jù)經(jīng)緯度查詢地址的示例代碼

    Python調(diào)用百度根據(jù)經(jīng)緯度查詢地址的示例代碼

    今天小編就為大家分享一篇Python調(diào)用百度根據(jù)經(jīng)緯度查詢地址的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Ubuntu20.04環(huán)境安裝tensorflow2的方法步驟

    Ubuntu20.04環(huán)境安裝tensorflow2的方法步驟

    這篇文章主要介紹了Ubuntu20.04環(huán)境安裝tensorflow2的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • PyCharm使用最多也最常用默認(rèn)快捷鍵分享

    PyCharm使用最多也最常用默認(rèn)快捷鍵分享

    這篇文章主要介紹了PyCharm使用最多也最常用默認(rèn)快捷鍵,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python處理zip壓縮文件的常見操作

    Python處理zip壓縮文件的常見操作

    處理zip格式壓縮包文件,可以使用python的zipfile模塊,Python的zipfile模塊用于處理zip格式的壓縮包,以下是一些使用Python的zipfile模塊的常見操作,通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • python中os模塊和sys模塊的使用詳解

    python中os模塊和sys模塊的使用詳解

    本文主要介紹了python中os模塊和sys模塊的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評論

永靖县| 荔波县| 施甸县| 扬中市| 浦县| 兴安盟| 克山县| 阳山县| 南华县| 麻江县| 安多县| 顺昌县| 云阳县| 巴中市| 宣威市| 西藏| 北川| 汉沽区| 商都县| 普安县| 方城县| 土默特右旗| 铅山县| 巴楚县| 黄梅县| 灵丘县| 武功县| 新巴尔虎左旗| 正阳县| 忻州市| 汉源县| 金寨县| 江油市| 阿巴嘎旗| 桃园市| 南川市| 宿松县| 惠州市| 朝阳市| 双峰县| 铁力市|