根據內容刪除特定的 PDF 頁面

根據內容刪除特定的 PDF 頁面

我有超過 50,000 個 PDF 文件需要分配給客戶帳戶。但是,每個 PDF 都包含我不希望客戶看到的頁面(公司內部內容),因此我希望能夠根據其內容刪除特定頁面(頁面上顯示「僅供辦公室使用」)並儲存 PDF作為一個新文件。

我對腳本方面很滿意,我只需要知道什麼軟體能夠完成這樣的任務。

答案1

Python!

有許多用於操作 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 作為識別要刪除的頁碼的簡單方法可能很有用。

相關內容