![根據內容刪除特定的 PDF 頁面](https://rvso.com/image/97238/%E6%A0%B9%E6%93%9A%E5%85%A7%E5%AE%B9%E5%88%AA%E9%99%A4%E7%89%B9%E5%AE%9A%E7%9A%84%20PDF%20%E9%A0%81%E9%9D%A2.png)
我有超過 50,000 個 PDF 文件需要分配給客戶帳戶。但是,每個 PDF 都包含我不希望客戶看到的頁面(公司內部內容),因此我希望能夠根據其內容刪除特定頁面(頁面上顯示「僅供辦公室使用」)並儲存 PDF作為一個新文件。
我對腳本方面很滿意,我只需要知道什麼軟體能夠完成這樣的任務。
答案1
有許多用於操作 PDF 文件的庫,包括未維護的庫pypdf和它的叉子PythonPDF2。您可以逐頁處理文件,提取文字並複製文字合適的頁面。
我使用 Python3.6 和 PyPDF2==1.26.0 執行以下命令:
#!/usr/bin/env python3
import re
import sys
from PyPDF2 import PdfFileWriter, PdfFileReader
pdf_in = PdfFileReader(sys.stdin.buffer)
pdf_out = PdfFileWriter()
for p in [pdf_in.getPage(i) for i in range(0, pdf_in.getNumPages())]:
text = p.extractText()
if not re.search(r'for\s+office\s+use\s+only', text, re.I):
pdf_out.addPage(p)
pdf_out.write(sys.stdout.buffer)
請注意,文件中的文字可能不會完全按照您想要的方式顯示。在 PDF 文件中,行、單字甚至字元可能會出現亂序。文件可以由出現在某些座標的片段構成,而不是文字流。
即使文字按順序排列(通常是這種情況),跨多個頁面的文字也會在中間有頁腳和頁首。跨多行的文字在換行符周圍可能有額外的空格。由於文字對齊,即使同一行上的文字也可能在單字之間有多個空格(這就是我\s+
在上面的正規表示式中使用而不是純空格的原因)。
從 PDF 中提取文本的工具嘗試將頁面重建為文本,但並非總是能完美完成工作。如果 pyPdf 不能很好地處理您的文檔,您可以嘗試其他庫進行文字提取;看這和這線程一些例子。
答案2
一種選擇是查看命令列 PDF 編輯器,例如 PDFEdit、Pdftk 或 PDFSaM。 pdftotext 作為識別要刪除的頁碼的簡單方法可能很有用。