tft每日頭條

 > 生活

 > python編輯pdf内容

python編輯pdf内容

生活 更新时间:2025-01-09 16:50:35

PDF 文檔格式

今天,可移植文檔格式(PDF)屬于最常用的數據格式。 1990年,Adobe定義了PDF文檔格式。 PDF格式背後的想法是傳輸的數據/文檔對于通信過程中涉及的雙方——創建者,作者或發送者和接收者來說看起來完全相同。 PDF是PostScript格式的後續版本,标準化為ISO 32000-2:2017。

處理PDF文檔

對于Linux,有很多可用的命令行工具,如pdftk和pdfgrep來操作pdf。 作為開發人員,您可以構建自己的基于Python的軟件,并使用免費提供的PDF庫。

本文是一個小系列的開頭,将介紹這些有用的Python庫。 在第一部分中,我們将重點介紹現有PDF的操作。 您将學習如何閱讀和提取内容(文本和圖像),旋轉單個頁面以及将文檔拆分為單獨的頁面。 第二部分将介紹如何根據疊加層添加水印。 第三部分将專注于編寫/創建PDF,還将包括删除和重新組合單個頁面到新文檔。

工具和庫

Python相關的PDF工具,模塊和庫的可用解決方案範圍有點令人困惑,需要花一點時間來弄清楚什麼是什麼,以及哪些項目是持續維護的。 根據我們的研究,這些是目前最新的方案:

下面我們将重點介紹PyPDF2和PyMuPDF,并解釋如何以最簡單的方式提取文本和圖像。 為了理解PyPDF2的用法,官方文檔和其他資源提供的大量示例的組合。 相比之下,官方的PyMuPDF文檔更清晰,使用庫的速度要快得多。

用PyPDF2提取文檔

PyPDF2可以作為常規軟件包安裝,也可以使用pip3(适用于Python3)安裝。 這裡的測試基于即将推出的Debian GNU / Linux版本10“Buster”的軟件包。 Debian軟件包的名稱是python3-pypdf2。

下面的代碼首先導入PdfFilereader 類,然後适用這個類打開文件,用getDocumentInfo() 方法來提取文檔信息,包括頁數和首頁内容。

請注意PyPDF2頁碼計數從0開始,這也是為什麼pdf.getPage(0) 函數可以獲取文件的第一頁。最終,提取到的信息被打印到了stdout

python編輯pdf内容(在Python中使用PDF閱讀和拆分)1

使用PyMuPDF提取文本

PyMuPDF可從PyPi網站獲得,您可以在終端中使用以下命令安裝包:

python編輯pdf内容(在Python中使用PDF閱讀和拆分)2

顯示文檔信息,打印頁數和提取PDF文檔的文本的方式與PyPDF2類似(參見清單2)。 要導入的模塊名為fitz,并返回到PyMuPDF的先前名稱。

python編輯pdf内容(在Python中使用PDF閱讀和拆分)3

PyMuPDF的優點在于它保持原始文檔結構的完整性 - 帶有換行符的整個段落保留在PDF文檔中。

使用PyMuPDF從PDF中提取圖像

PyMuPDF使用getPageImageList()方法簡化了從PDF文檔中提取圖像的過程。下面的代碼來源于PyMuPDF wiki頁面的示例,并逐頁提取并保存PDF中的所有圖像作為PNG文件。 如果圖像具有CMYK顔色空間,則首先将其轉換為RGB。

python編輯pdf内容(在Python中使用PDF閱讀和拆分)4

在400頁PDF上運行這個Python腳本,它在不到3秒的時間内提取了117個圖像,這是驚人的。 各個圖像以PNG格式存儲。 為了保持原始圖像格式和大小,而不是轉換為PNG,請查看PyMuPDF wiki中腳本的擴展版本。

使用PyPDF2将PDF拆分為頁面

對于此示例,首先需要導入PdfFileReader和PdfFileWriter類。 然後我們打開PDF文件,創建一個reader對象,并使用reader對象的getNumPages方法遍曆所有頁面。

在for循環中,我們創建了一個新的PdfFileWriter實例,它不包含任何頁面。 然後,我們使用pdfWriter.addPage()方法将當前頁面添加到writer對象。 此方法接受頁面對象,我們使用PdfFileReader.getPage()方法獲取該頁面對象。

下一步是創建一個唯一的文件名,我們使用原始文件名加上“page”一詞加上頁碼。 我們在當前頁碼中加1,因為PyPDF2計算從零開始的頁碼。

最後,我們以“write binary”模式(模式wb)打開新文件名,并使用pdfWriter類的write()方法将提取的頁面保存到磁盤。

python編輯pdf内容(在Python中使用PDF閱讀和拆分)5

查找包含文本的所有頁面

這個功能非常實用,與pdfgrep類似。 使用PyMuPDF,腳本将返回包含給定搜索字符串的所有頁碼。 頁面一個接一個地加載,并且在searchFor()方法的幫助下,檢測到搜索字符串的所有出現。 如果匹配,則在stdout上打印相應的消息。

python編輯pdf内容(在Python中使用PDF閱讀和拆分)6

結論:

這裡講解的方法非常強大。 使用相對較少數量的代碼行,可以輕松獲得結果。 更多功能在第二部分(即将推出!)中進行了研究,其中包括為PDF添加水印.

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved