真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python如何從PDF中提取元數(shù)據(jù)

這篇文章主要講解了“Python如何從PDF中提取元數(shù)據(jù)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Python如何從PDF中提取元數(shù)據(jù)”吧!

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出錦江免費(fèi)做網(wǎng)站回饋大家。

PyPdf PyPDF2 PyPDF4的歷史

最初的pyPdf軟件包于2005年發(fā)布。pyPdf的最后一個(gè)正式版本是在2010年。大約一年后,一家名為Phasit的公司贊助了一個(gè)名為PyPDF2的pyPdf分支。該代碼編寫為向后與原始代碼兼容,并且用了好多年,效果一直很好,其最后一個(gè)版本是在2016年。

有一個(gè)名為PyPDF3的軟件包簡(jiǎn)短系列版本,然后該項(xiàng)目被重命名為PyPDF4。所有這些項(xiàng)目都完全相同,但pyPdf和PyPDF2 +之間的最大區(qū)別在于后者版本增加了Python 3支持。Python 3的原始pyPdf有一個(gè)不同的Python 3分支,但是這個(gè)分支已經(jīng)多年沒有維護(hù)了。

雖然最近放棄了PyPDF2,但新的PyPDF4與PyPDF2沒有完全的向后兼容性。本文中的大多數(shù)示例都可以與PyPDF4完美配合,但也有一些不能,這就是為什么PyPDF4在本文中沒有更多的特色。隨意用PyPDF4替換PyPDF2的導(dǎo)入,看看它是如何工作的。

pdfrw:一個(gè)替代的PDF操作包

Patrick Maupin創(chuàng)建了一個(gè)名為pdfrw的軟件包,它可以完成許多與PyPDF2相同的工作。除了加密的特殊情況外,本文后面提到PyPDF2的所有操作,pdfrw均可以實(shí)現(xiàn)。

pdfrw的最大區(qū)別在于它與ReportLab軟件包集成,因此你可以使用一些或所有預(yù)先存在的PDF構(gòu)建一個(gè)新的PDF。

PyPDF2的安裝

如果使用Anaconda而不是常規(guī)Python,可以使用pip或conda安裝PyPDF2。以下是使用pip安裝PyPDF2的方法:

$ pip install pypdf2

由于PyPDF2沒有任何依賴,因此安裝非???。

如何從Python****中提取PDF文檔信息

我們可以使用PyPDF2從PDF中提取元數(shù)據(jù)和一些文本,尤其是當(dāng)在預(yù)先存在的PDF文件上執(zhí)行某些類型的自動(dòng)化時(shí)是非常有用的。

以下是當(dāng)前可以提取的數(shù)據(jù)類型:

  • Author

  • Creator

  • Producer

  • Subject

  • Title

  • Number of page

可以在自己的電腦上隨便找一個(gè)PDF文件進(jìn)行嘗試操作。下面是使用該P(yáng)DF編寫一些代碼,并了解如何訪問這些屬性:

from PyPDF2 import PdfFileReader
def extract_information(pdf_path):
 with open(pdf_path, 'rb') as f:
 pdf = PdfFileReader(f)
 information = pdf.getDocumentInfo()
 number_of_pages = pdf.getNumPages()
 txt = f"""
 Information about {pdf_path}:
 Author: {information.author}
 Creator: {information.creator}
 Producer: {information.producer}
 Subject: {information.subject}
 Title: {information.title}
 Number of pages: {number_of_pages}
 """
 print(txt)
 return information
if __name__ == '__main__':
 path = 'xxxx.pdf'
 extract_information(path)

首先從PyPDF2包導(dǎo)入PdfFileReader。PdfFileReader是一個(gè)具有多種與PDF文件交互的方法的類。在此示例中,我們調(diào)用了.getDocumentInfo(),它將返回DocumentInformation的實(shí)例,包含了我們感興趣的大部分信息。我們還可以在reader對(duì)象上調(diào)用.getNumPages(),讓它返回文檔中的頁數(shù)。

information這個(gè)變量具有多個(gè)實(shí)例屬性,可以使用這些屬性從文檔中獲取所需的其余元數(shù)據(jù)。我們可以打印出該信息并將其返回以備將來使用。

雖然PyPDF2具有.extractText(),可以在其頁面對(duì)象上使用提取文本(本例中未顯示),但它的效果不是很好。有些PDF會(huì)返回文本,有些會(huì)返回空字符串。如果要從PDF中提取文本,建議應(yīng)該看一下PDFMiner項(xiàng)目。PDFMiner更加強(qiáng)大,專門用于從PDF中提取文本。

如何旋轉(zhuǎn)頁面?

有時(shí)候PDF是橫向模式而不是縱向模式,甚至是顛倒的。當(dāng)有人掃描文檔為PDF或電子郵件時(shí),很可能會(huì)發(fā)生這種情況。我們可以打印出文檔并閱讀紙質(zhì)版本,也可以使用Python的強(qiáng)大功能來旋轉(zhuǎn)有問題的頁面。

下面看一下如何使用PyPDF2旋轉(zhuǎn)文章的一些頁面:

from PyPDF2 import PdfFileReader, PdfFileWriter
def rotate_pages(pdf_path):
 pdf_writer = PdfFileWriter()
 pdf_reader = PdfFileReader(path)
 # 順時(shí)針旋轉(zhuǎn)90度
 page_1 = pdf_reader.getPage(0).rotateClockwise(90)
 pdf_writer.addPage(page_1)
 # 逆時(shí)針旋轉(zhuǎn)90度
 page_2 = pdf_reader.getPage(1).rotateCounterClockwise(90)
 pdf_writer.addPage(page_2)
 # 在正常方向上添加一頁
 pdf_writer.addPage(pdf_reader.getPage(2))
 with open('rotate_pages.pdf', 'wb') as fh:
 pdf_writer.write(fh)
if __name__ == '__main__':
 path = '新路徑.pdf'
 rotate_pages(path)

上面除了pdfileReader之外,還導(dǎo)入了pdfileWriter,因?yàn)槲覀冃枰帉懸粋€(gè)新的pdf。rotate_pages()獲取要修改的PDF的路徑。在這個(gè)函數(shù)中,需要?jiǎng)?chuàng)建一個(gè)可以命名為pdf-writer的writer對(duì)象和一個(gè)名為pdf-reader的reader對(duì)象。

接下來,可以使用.get page()獲取所需的頁面。上面開始輸入了第0頁,也就是第一頁,調(diào)用page對(duì)象的.rotateClockwise()順時(shí)針旋轉(zhuǎn)方法并輸入90。然后同樣地,對(duì)于第二頁,調(diào)用.rotateCounterLockwise()逆時(shí)針旋轉(zhuǎn)并輸入90。

每次調(diào)用Rotation旋轉(zhuǎn)方法后,都會(huì)調(diào)用.addPage(),這將向writer對(duì)象添加頁面的旋轉(zhuǎn)版本。最后一頁是第3頁,沒有對(duì)其進(jìn)行任何旋轉(zhuǎn)。最后,使用.write()把所有新頁寫入新的PDF。

如何合并PDF?

在許多情況下,我們希望將兩個(gè)或多個(gè)PDF合并到一個(gè)PDF中。例如,現(xiàn)在可能有一個(gè)標(biāo)準(zhǔn)的封面,需要轉(zhuǎn)到許多類型的報(bào)告中。這時(shí)候就可以使用python來幫助完成這類工作。

下面是實(shí)現(xiàn)的代碼,完成PDF合并的操作:

from PyPDF2 import PdfFileReader, PdfFileWriter
def merge_pdfs(paths, output):
 pdf_writer = PdfFileWriter()
 for path in paths:
 pdf_reader = PdfFileReader(path)
 for page in range(pdf_reader.getNumPages()):
 # 將每頁添加到writer對(duì)象
 pdf_writer.addPage(pdf_reader.getPage(page))
 # 寫入合并的pdf
 with open(output, 'wb') as out:
 pdf_writer.write(out)
if __name__ == '__main__':
 paths = ['document1.pdf', 'document2.pdf']
 merge_pdfs(paths, output='merged.pdf')

假如有一個(gè)要合并到一起的pdf列表時(shí),可以直接使用merge_pdf函數(shù)完成。此函數(shù)采用了輸入路徑和輸出路徑作為參數(shù)。

首先遍歷輸入的paths,并為每個(gè)輸入創(chuàng)建一個(gè)PDF閱讀對(duì)象。然后遍歷PDF文件中的所有頁面,并使用.addpage()將這些頁面寫入writer對(duì)象。當(dāng)完成對(duì)列表中所有PDF的所有頁面的寫入后,將在末尾寫入新的結(jié)果中。

如果不想合并每個(gè)PDF的所有頁面,可以通過添加一系列要添加的頁面來稍微增強(qiáng)這個(gè)腳本。挑戰(zhàn)一點(diǎn)的話,也可以使用Python的argparse模塊為這個(gè)函數(shù)創(chuàng)建一個(gè)命令行接口。

如何拆分PDF?

有時(shí)可能需要將PDF拆分為多個(gè)PDF,對(duì)于包含大量掃描內(nèi)容的PDF來說尤其重要。以下是如何使用PyPDF2將PDF拆分為多個(gè)文件:

from PyPDF2 import PdfFileReader, PdfFileWriter
def split(path, name_of_split):
 pdf = PdfFileReader(path)
 for page in range(pdf.getNumPages()):
 pdf_writer = PdfFileWriter()
 pdf_writer.addPage(pdf.getPage(page))
 output = f'{name_of_split}{page}.pdf'
 with open(output, 'wb') as output_pdf:
 pdf_writer.write(output_pdf)
if __name__ == '__main__':
 path = 'xxx.pdf'
 split(path, 'jupyter_page')

這個(gè)函數(shù)中再次創(chuàng)建了PDF的reaer對(duì)象,并對(duì)其所讀取的頁面進(jìn)行遍歷。對(duì)于PDF中的每個(gè)頁面,創(chuàng)建一個(gè)新的PDF的writer實(shí)例并向其添加單個(gè)頁面。然后,將該頁面寫入一個(gè)唯一命名的文件。腳本運(yùn)行完畢后,就可以將原始PDF的每個(gè)頁面拆分為單獨(dú)的PDF。

如何添加水???

水印是紙質(zhì)或者電子文檔上的圖像或圖案,一些水印只能在特殊照明條件下才能看到。水印的重要性在于它可以保護(hù)你的知識(shí)產(chǎn)權(quán),例如圖像或PDF。

我們可以使用Python和PyPDF2為文檔添加水印,而且是擁有僅包含水印圖像或文本的PDF。下面是向PDF添加水印方法:

from PyPDF2 import PdfFileWriter, PdfFileReader

def create_watermark(input_pdf, output, watermark):

watermark_obj = PdfFileReader(watermark)

watermark_page = watermark_obj.getPage(0)

pdf_reader = PdfFileReader(input_pdf)

pdf_writer = PdfFileWriter()

# 給所有頁面添加水印

for page in range(pdf_reader.getNumPages()):

page = pdf_reader.getPage(page)

page.mergePage(watermark_page)

pdf_writer.addPage(page)

with open(output, 'wb') as out:

pdf_writer.write(out)

if __name__ == '__main__':

create_watermark(

input_pdf='Jupyter_Notebook_An_Introduction.pdf',

output='watermarked_notebook.pdf',

watermark='watermark.pdf')

上面create_watermark有三個(gè)參數(shù):

  • input_pdf:要加水印的PDF文件路徑

  • output:要保存PDF的水印版本的路徑

  • watermark:包含水印圖像或文本的PDF

在代碼中,打開水印PDF并從文檔中抓取第一頁,因?yàn)檫@是水印應(yīng)該駐留的位置。然后使用input_pdf和通用pdf_writer對(duì)象創(chuàng)建PDF的writer對(duì)象,以寫出帶水印的PDF。

下一步是遍歷input_pdf中的頁面,然后調(diào)用.mergePage()并以用上面讀取的水印對(duì)象watermark_page為參數(shù),這樣會(huì)將watermark_page覆蓋在當(dāng)前頁面的頂部,然后再將新合并的頁面添加到pdf_writer對(duì)象中。遍歷完成后,最后將新加水印的PDF寫入磁盤。

如何加密PDF?

PyPDF2目前僅支持將用戶密碼和所有者密碼添加到預(yù)先存在的PDF。在PDF版本中,所有者密碼會(huì)提供PDF的管理員權(quán)限,并允許設(shè)置文檔的權(quán)限,而用戶密碼只允許打開文檔。

實(shí)際上,PyPDF2是不允許設(shè)置文檔的任何權(quán)限的,即使它允許設(shè)置所有者密碼的情況下。但無論如何,這是可以加密的方式,也將固有地加密PDF:

from PyPDF2 import PdfFileWriter, PdfFileReader
def add_encryption(input_pdf, output_pdf, password):
 pdf_writer = PdfFileWriter()
 pdf_reader = PdfFileReader(input_pdf)
 for page in range(pdf_reader.getNumPages()):
 pdf_writer.addPage(pdf_reader.getPage(page))
 pdf_writer.encrypt(user_pwd=password, owner_pwd=None, 
 use_128bit=True)
 with open(output_pdf, 'wb') as fh:
 pdf_writer.write(fh)
if __name__ == '__main__':
 add_encryption(input_pdf='reportlab-sample.pdf',
 output_pdf='reportlab-encrypted.pdf',
 password='twofish')

add_encryption以輸入輸出PDF路徑和要添加到PDF的密碼為參數(shù)。由于需要加密整個(gè)輸入PDF,因此需要遍歷其所有頁面并將其添加到writer編寫器。最后一步是調(diào)用.encrypt(),以用戶密碼,所有者密碼以及是否應(yīng)該添加128位加密為參數(shù)。默認(rèn)情況下,要啟用128位加密。如果將其設(shè)置為False,則將應(yīng)用40位加密。

感謝各位的閱讀,以上就是“Python如何從PDF中提取元數(shù)據(jù)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Python如何從PDF中提取元數(shù)據(jù)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


新聞名稱:Python如何從PDF中提取元數(shù)據(jù)
本文URL:http://weahome.cn/article/iesojc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部