欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python操作PDF文件

 更新時(shí)間:2022年06月13日 10:25:57   作者:springsnow  
這篇文章介紹了Python操作PDF文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

從PDF讀取文本內(nèi)容和從已經(jīng)有的文檔生成新的PDF。

需要用到的模塊是PyPDF2.

mstamy2/PyPDF2: A utility to read and write PDFs with Python (github.com)

同時(shí),還要關(guān)注較新的PyPDF4包,因?yàn)樗芸炀蜁?huì)取代PyPDF2。

claird/PyPDF4: A utility to read and write PDFs with Python (github.com)

也可以看看pdfrw包,它也可以執(zhí)行許多與PyPDF2相同的操作。

pmaupin/pdfrw: pdfrw is a pure Python library that reads and writes PDFs (github.com)

首先安裝PyPDF2,在命令行中運(yùn)行,由于PyPDF2沒有任何依賴,因此安裝非??臁?/p>

pip install PyPDF2

操作方法

1、從PDF讀取文本

PyPDF2無(wú)法從pdf文檔中提取圖像,圖表和其他媒體,但是它可以提取文本,并且將文本返回為python字符串。

import PyPDF2
# ===============從pdf中提取文本===========
pdffile = open(r'E:\python讓繁瑣的工作自動(dòng)化\13_處理pdf和word文檔\data\meetingminutes.pdf', 'rb')  # 讀取pdf文件
pdfreader = PyPDF2.PdfFileReader(pdffile)  # 讀入到
print(pdfreader.numPages)  # 讀取pdf頁(yè)數(shù)======19

獲取第一頁(yè)的內(nèi)容:

page0 = pdfreader.getPage(0)  #獲取第1頁(yè),第一頁(yè)是0
print(page0.extractText())  # 獲取第2頁(yè)的內(nèi)容,返回的是字符串

內(nèi)容是

2、解密PDF

某些文檔有加密功能,為了防止別人閱讀,只有在打開文檔的時(shí)候提供口令才能閱讀。我打開的文件的加密口令是rosebud.

其實(shí)在讀取一個(gè)pdf文件是首先應(yīng)該確定它是否加密了。如果加密,isEncrypted屬性就會(huì)返回True.此時(shí)就需要口令了。

# 某些pdf文件是加密的,防止別人閱讀的,只有打開文檔的時(shí)候提供口令才能閱讀
pdf_reader = PyPDF2.PdfFileReader(open(r'E:\python讓繁瑣的工作自動(dòng)化\13_處理pdf和word文檔\data\encrypted.pdf','rb'))
print(pdf_reader.isEncrypted)  # 文件是否加密

返回的結(jié)果是:

如果這時(shí)候不輸入口令就獲取內(nèi)容的話。

print(pdf_reader.getPage(0))  # PyPDF2.utils.PdfReadError: file has not been decrypted 文件還沒有解鎖

會(huì)提示出現(xiàn)錯(cuò)誤。

此時(shí)調(diào)用decrypt方法,輸入口令,再讀取就可以啦。

print(pdf_reader.decrypt('rosebud'))  # rosebud==正確口令顯示1,其他顯示0
page_obj = pdf_reader.getPage(0)  # 這樣才能正確讀取
print(page_obj.extractText())

3、創(chuàng)建PDF

PyPDF2可以創(chuàng)建一個(gè)新的PDF文件,但是不能將任何文本寫入到PDF。其寫入PDF的能力,僅限于從其他PDF中拷貝頁(yè)面、旋轉(zhuǎn)頁(yè)面、重疊頁(yè)面和加密文件。后面一一介紹。

4、拷貝頁(yè)面

# ==========拷貝頁(yè)面==============
pdffile1 = open(r'E:\python讓繁瑣的工作自動(dòng)化\13_處理pdf和word文檔\data\meetingminutes.pdf', 'rb')
pdffile2 = open(r'E:\python讓繁瑣的工作自動(dòng)化\13_處理pdf和word文檔\data\meetingminutes2.pdf', 'rb')
pdf1_reader = PyPDF2.PdfFileReader(pdffile1)
pdf2_reader = PyPDF2.PdfFileReader(pdffile2)
# 創(chuàng)建一個(gè)pdf文檔,這個(gè)只是代表pdf文檔的值,并沒有創(chuàng)建實(shí)際的文檔。
pdf_writer = PyPDF2.PdfFileWriter()
# 將文檔一頁(yè)一頁(yè)的讀入到新的文檔
for pagenum in range(pdf1_reader.numPages):
    pageobj = pdf1_reader.getPage(pagenum)
    pdf_writer.addPage(pageobj)

for pagenum in range(pdf2_reader.numPages):
    pageobj = pdf2_reader.getPage(pagenum)
    pdf_writer.addPage(pageobj)
    
# write方法才能真正生成一個(gè)文件
pdfoutputfile = open('combin.pdf','wb')
pdf_writer.write(pdfoutputfile)
pdfoutputfile.close()
pdffile1.close()
pdffile2.close()

在對(duì)應(yīng)目錄下生成pdf文件

5、旋轉(zhuǎn)頁(yè)面

利用rotateClockwise()和rotateCounterClockwise()方法PDF頁(yè)面可以旋轉(zhuǎn)90的整倍數(shù)。

pdffile1 = open(r'E:\python讓繁瑣的工作自動(dòng)化\13_處理pdf和word文檔\data\meetingminutes.pdf', 'rb')
pdfreaders = PyPDF2.PdfFileReader(pdffile1)
page = pdfreaders.getPage(0)  # 獲取第一頁(yè)
page.rotateClockwise(90)  # 第一頁(yè)旋轉(zhuǎn)90度
# 創(chuàng)建一個(gè)新的PDF文檔
pdfwriter = PyPDF2.PdfFileWriter()
# 添加內(nèi)容
pdfwriter.addPage(page)
# 真實(shí)創(chuàng)建PDF文件并寫入內(nèi)容
result = open('ratated.pdf','wb')
pdfwriter.write(result)
# 關(guān)閉文件
result.close()
pdffile1.close()

點(diǎn)擊開PDF文檔,結(jié)果是:

6、疊加頁(yè)面

有的時(shí)候需要在PDF中添加公司的標(biāo)志、時(shí)間戳或水印。我們用這個(gè)庫(kù)依然可以實(shí)現(xiàn)。

# 給指定的頁(yè)面添加水印、公司標(biāo)志或者時(shí)間戳。
pdffile1 = open(r'E:\python讓繁瑣的工作自動(dòng)化\13_處理pdf和word文檔\data\meetingminutes.pdf', 'rb')
pdf_reader1 = PyPDF2.PdfFileReader(pdffile1)
# 獲取該文檔的第一頁(yè)
first_page = pdf_reader1.getPage(0)
# 打開印有水印的PDF文件
water_pdf = PyPDF2.PdfFileReader(r'E:\python讓繁瑣的工作自動(dòng)化\13_處理pdf和word文檔\data\watermark.pdf', 'rb')
# 在上一個(gè)文檔的第一頁(yè)中加入這個(gè)有水印的文件
first_page.mergePage(water_pdf.getPage(0))
# 將讀取的內(nèi)容寫入到對(duì)象中
pdfwriter = PyPDF2.PdfFileWriter()
pdfwriter.addPage(first_page)

結(jié)果是:

7、加密PDF

我們可以對(duì)拷貝的頁(yè)面進(jìn)行加密。

pdffile1 = open(r'E:\python讓繁瑣的工作自動(dòng)化\13_處理pdf和word文檔\data\meetingminutes.pdf', 'rb')
pdf_reader1 = PyPDF2.PdfFileReader(pdffile1)
# 將讀取的內(nèi)容寫入對(duì)象中
pdfwriter = PyPDF2.PdfFileWriter()
for pagenum in range(pdf_reader1.numPages):
    pdfwriter.addPage(pdf_reader1.getPage(pagenum))

# 輸入口令
pdfwriter.encrypt('meimei')
# 真正創(chuàng)建PDF文件
result_pdf = open('encry.pdf','wb')
pdfwriter.write(result_pdf)
# 關(guān)閉文件
result_pdf.close()

點(diǎn)擊生成的PDF文件。

輸入密碼才可以打開。

到此這篇關(guān)于Python操作PDF文件的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中Numpy模塊使用詳解

    Python中Numpy模塊使用詳解

    這篇文章主要介紹了Python中Numpy模塊使用詳解,NumPy是Python 的一個(gè)擴(kuò)展程序庫(kù),支持大量的維度數(shù)組與矩陣運(yùn)算。更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • 淺談python輸出列表元素的所有排列形式

    淺談python輸出列表元素的所有排列形式

    今天小編就為大家分享一篇淺談python輸出列表元素的所有排列形式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python實(shí)現(xiàn)自動(dòng)更換ip的方法

    python實(shí)現(xiàn)自動(dòng)更換ip的方法

    這篇文章主要介紹了python實(shí)現(xiàn)自動(dòng)更換ip的方法,涉及Python針對(duì)本機(jī)網(wǎng)絡(luò)配置的相關(guān)操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • Python OpenCV學(xué)習(xí)之圖形繪制總結(jié)

    Python OpenCV學(xué)習(xí)之圖形繪制總結(jié)

    在圖像的任務(wù)中,不管是圖像檢測(cè)還是圖像識(shí)別,我們都需要通過繪制圖形和繪制文字對(duì)處理的結(jié)果進(jìn)行說明,本篇就詳細(xì)介紹下OpenCV中的圖形的繪制,感興趣的可以了解一下
    2022-01-01
  • 深入了解python列表(LIST)

    深入了解python列表(LIST)

    這篇文章主要介紹了python列表(LIST)的相關(guān)知識(shí),文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Python 如何反方向迭代一個(gè)序列

    Python 如何反方向迭代一個(gè)序列

    這篇文章主要介紹了Python 如何反方向迭代一個(gè)序列,文中講解非常細(xì)致,代碼幫助大家更好理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • OpenCV立體圖像深度圖Depth Map基礎(chǔ)

    OpenCV立體圖像深度圖Depth Map基礎(chǔ)

    這篇文章主要為大家介紹了OpenCV立體圖像深度圖Depth Map基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • PHP網(wǎng)頁(yè)抓取之抓取百度貼吧郵箱數(shù)據(jù)代碼分享

    PHP網(wǎng)頁(yè)抓取之抓取百度貼吧郵箱數(shù)據(jù)代碼分享

    本文給大家介紹PHP網(wǎng)頁(yè)抓取之抓取百度貼吧郵箱數(shù)據(jù)代碼分享,程序?qū)崿F(xiàn)了一鍵抓取帖子全部郵箱和分頁(yè)抓取郵箱兩個(gè)功能,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • ipython和python區(qū)別詳解

    ipython和python區(qū)別詳解

    在本篇文章里小編給大家分享了關(guān)于ipython和python區(qū)別的相關(guān)知識(shí)點(diǎn),有興趣的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • Python編程之基于概率論的分類方法:樸素貝葉斯

    Python編程之基于概率論的分類方法:樸素貝葉斯

    這篇文章主要介紹了Python編程之基于概率論的分類方法:樸素貝葉斯,簡(jiǎn)單介紹了其概述,貝葉斯理論和條件概率,以及樸素貝葉斯的原理等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論