Удаление определенных страниц PDF в зависимости от содержимого

У меня более 50 000 PDF-документов, которые нужно отнести на счета клиентов. Однако каждый PDF содержит страницы, которые я не хочу видеть клиентом (внутренние вещи компании), и поэтому я хотел бы иметь возможность удалять определенные страницы на основе их содержимого («только для служебного использования», отображаемого на странице) и сохранять PDF-файл как новый файл.

Мне комфортно со стороны сценариев, мне просто нужно знать, какое программное обеспечение способно на такую ​​задачу.

Python!

Существует множество библиотек для работы с файлами PDF, в том числе pyPdf, и является производным PyPDF2 . Вы можете обрабатывать страницу по страницам, извлекать текст и копировать страницы, текст которых подходит. Неподтвержденный код:

#!/usr/bin/env python import re, sys from pyPdf import PdfFileWriter, PdfFileReader input = PdfFileReader(sys.stdin) output = PdfFileWriter() for p in [input.getPage(i) for i in range(0,input.getNumPages())]: text = p.extractText() if not re.search(r'for\s+office\s+use\s+only', text, re.I): output.addPage(p) output.write(sys.stdout) 

Помните, что текст может не отображаться в документе точно так, как вы хотите. В PDF-документе строки, слова или даже символы могут выглядеть не по порядку: вместо потока текста документ может быть построен с частями, появляющимися в определенных координатах. Даже если текст в порядке, что обычно бывает, текст, который охватывает несколько страниц, будет иметь нижний колонтитул и заголовок посередине. Текст, который охватывает несколько строк, может иметь дополнительные пробелы вокруг разрывов строк. Даже текст в одних и тех же строках может содержать несколько пробелов между словами из-за выравнивания текста (поэтому я использовал \s+ вместо простого пространства в регулярном выражении выше). Инструменты, извлекающие текст из PDF, пытаются восстановить страницу как текст, но не всегда делают идеальную работу. Если pyPdf не работает с вашими документами, вы можете попробовать другие библиотеки для извлечения текста; см. эту и эту тему для некоторых примеров.

Один из вариантов – просмотр редакторов PDF в командной строке, таких как PDFEdit, Pdftk или PDFSaM. pdftotext может быть полезен как простой способ идентифицировать номера страниц для удаления.