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

使用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沒有任何依賴,因此安裝非???。

pip install PyPDF2

操作方法

1、從PDF讀取文本

PyPDF2無法從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頁數(shù)======19

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

page0 = pdfreader.getPage(0)  #獲取第1頁,第一頁是0
print(page0.extractText())  # 獲取第2頁的內(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中拷貝頁面、旋轉(zhuǎn)頁面、重疊頁面和加密文件。后面一一介紹。

4、拷貝頁面

# ==========拷貝頁面==============
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()
# 將文檔一頁一頁的讀入到新的文檔
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)頁面

利用rotateClockwise()和rotateCounterClockwise()方法PDF頁面可以旋轉(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)  # 獲取第一頁
page.rotateClockwise(90)  # 第一頁旋轉(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、疊加頁面

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

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

結(jié)果是:

7、加密PDF

我們可以對(duì)拷貝的頁面進(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安裝scrapy的正確姿勢

    詳解Python安裝scrapy的正確姿勢

    Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù)提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。這篇文章主要介紹了Python安裝scrapy的正確姿勢,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • python如何停止遞歸

    python如何停止遞歸

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python停止遞歸的方法和相關(guān)知識(shí)點(diǎn),有興趣的朋友們可以學(xué)習(xí)下。
    2020-09-09
  • 關(guān)于Tensorflow中的tf.train.batch函數(shù)的使用

    關(guān)于Tensorflow中的tf.train.batch函數(shù)的使用

    本篇文章主要介紹了關(guān)于Tensorflow中的tf.train.batch函數(shù)的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • python幾種常用功能實(shí)現(xiàn)代碼實(shí)例

    python幾種常用功能實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了python幾種常用功能實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python中文編碼那些事

    Python中文編碼那些事

    由于中文的特殊性,造成了在各大編程語言中都存在編碼轉(zhuǎn)換的問題,今天我們來探討下python中中文編碼如何處理呢
    2014-06-06
  • Python類方法__init__和__del__構(gòu)造、析構(gòu)過程分析

    Python類方法__init__和__del__構(gòu)造、析構(gòu)過程分析

    這篇文章主要介紹了Python類方法__init__和__del__構(gòu)造、析構(gòu)過程分析,本文分析了什么時(shí)候構(gòu)造、什么時(shí)候析構(gòu)、成員變量如何處理、Python中的共享成員函數(shù)如何訪問等問題,需要的朋友可以參考下
    2015-03-03
  • 基于Python新建用戶并產(chǎn)生隨機(jī)密碼過程解析

    基于Python新建用戶并產(chǎn)生隨機(jī)密碼過程解析

    這篇文章主要介紹了基于Python新建用戶并產(chǎn)生隨機(jī)密碼過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 如何利用python處理原始音頻數(shù)據(jù)

    如何利用python處理原始音頻數(shù)據(jù)

    這篇文章主要介紹了如何利用python處理原始音頻數(shù)據(jù),文章以audioop的相關(guān)資料展開內(nèi)容,audioop是python標(biāo)準(zhǔn)庫中用于處理原始音頻數(shù)據(jù)的模塊,封裝了一些便捷的編碼轉(zhuǎn)換函數(shù)。下文詳細(xì)內(nèi)容,需要的朋友可以參考以下
    2022-01-01
  • 五分鐘帶你搞懂python 迭代器與生成器

    五分鐘帶你搞懂python 迭代器與生成器

    這篇文章主要介紹了python 迭代器與生成器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • Python格式化輸出之format用法詳解

    Python格式化輸出之format用法詳解

    Python中格式化字符串目前有兩種陣營:%和format,這篇文章主要給大家介紹了關(guān)于Python格式化輸出之format用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01

最新評(píng)論

南乐县| 定兴县| 沙雅县| 禹城市| 台中市| 南汇区| 南华县| 连江县| 泸州市| 探索| 新野县| 花莲市| 莒南县| 遵义县| 云和县| 竹溪县| 商城县| 临清市| 泰宁县| 武汉市| 兰考县| 蒙山县| 米易县| 甘洛县| 河池市| 长海县| 平度市| 深圳市| 鹤壁市| 潜山县| 泉州市| 玉田县| 新龙县| 浠水县| 东宁县| 海门市| 包头市| 屯门区| 双流县| 黑龙江省| 滁州市|