Стандарты, функции, использование, терминология
PDF - это формат файла, который был создан для печати одинаково везде. Он не задумывался как формат для обмена данными. В настоящее время его применяют во всех организациях. С его помощью вы можете создавать презентации, вы можете сохранять документы, такие как диссертация, вы можете создавать счета и формы.
На протяжении всей своей карьеры я имел сомнительное удовольствие читать файлы PDF несколько раз. В этой статье я поделюсь с вами некоторыми уроками. Пойдем!
Версии формата PDF
PDF - это развивающийся формат. Разработка формата началась компанией Adobe в 1993 году и была преобразована в стандарт ISO в 2008 году. Вот некоторые важные версии:
- PDF 1.3: Действия JavaScript, Цифровые подписи
- PDF 1.4: Прозрачность, JBIG2Decode был представлен
- PDF 1.5: JPXDecode, введен XFA, формат HTML 4 Form
- PDF 1.6: поддержка шрифтов OpenType, интерактивные 3D-документы
- PDF 1.7: Основа для частей PDF / A-2
- PDF 2.0: XFA устарел
Только изображения vs доступные для поиска vs созданные в цифровом виде
Когда вы используете сканер, вы получаете изображение. Формат файла изображения может быть JPG или PDF. Однако PDF-файл просто содержит изображение. Вы не можете копировать текст и не можете искать в документе. Поисковым системам будет труднее найти контент. Такие PDF-файлы называются PDF-файлы только с изображениями.
К изображению можно применить оптическое распознавание символов (OCR). Алгоритмы машинного обучения пытаются распознать персонажей и поместить их за изображение. Полученный PDF-файл по-прежнему выглядит так же, как PDF-файл только с изображениями, но теперь вы можете искать содержимое. Алгоритм OCR мог сделать ошибку, поэтому вы не сможете скопировать все, а некоторые вещи, которые вы копируете, могут оказаться неправильными. Такие PDF-файлы называются PDF-файлы с возможностью поиска. Многие сканеры могут напрямую создавать PDF-файлы с возможностью поиска.
Вы можете создать PDF-файл с помощью Microsoft Word или других инструментов для написания документов. Когда вы это сделаете, в итоговом PDF-файле будет текст, который другие смогут скопировать. С помощью стандартных средств просмотра PDF легко искать содержимое в PDF-документе. Причина в том, что данные находятся непосредственно в PDF-файле. PDF-файл, созданный в цифровом формате, иногда также называют созданным в цифровом формате или True PDF.
Возможность архивирования: PDF / A
PDF воспринимается как статическое содержимое, как лист бумаги. Однако есть две причины, по которым один PDF-файл может выглядеть по-разному на разных устройствах или в разное время:
- Активное содержимое: PDF может содержать JavaScript и PostScript.
- Вложения: вложения могут содержать что угодно
Чтобы исправить эту проблему, были разработаны стандарты PDF / A-1, PDF / A-2 и PDF / A-3. Все они представляют собой файлы PDF, но не подходят для архивов длительного хранения.
PDF / A-1 основан на PDF 1.4, а некоторые части PDF / A-2 основаны на PDF 1.7.
Существует программное обеспечение, которое может автоматически конвертировать файлы в PDF / A, но во всех случаях невозможно гарантировать, что полученный файл будет выглядеть точно так же, как оригинал. Рекомендуется проверить, является ли поставщик программного обеспечения, которое вы используете, членом PDF Association.
Универсальная доступность: PDF / UA
Люди с ограниченными возможностями также хотят читать файлы PDF. Чтобы помочь вспомогательным инструментам, таким как программы чтения с экрана, необходимо добавить семантику. Стандарт PDF / UA (универсальная доступность) аналогичен Руководству по обеспечению доступности веб-контента. Например, изображения должны иметь альтернативный текст, описывающий их содержание. Теги PDF должны группировать содержимое файла PDF по семантическим разделам.
Если вы хотите узнать больше, я рекомендую прочитать Техническое введение в PDF / UA.
Печать: PDF / X
PDF / X - это стандарт, основанный на PDF, ограничивающий его, чтобы сделать его более полезным для печати.
- PDF / X-1a был основан на PDF 1.3.
- PDF / X-3: Управление цветом
- PDF / X-4: Прозрачность
- PDF / X-5: больше гибкости
- PDF / X-6: на основе PDF 2.0
Хорошее объяснение дано в PDF / X в двух словах.
Печать переменных данных и транзакций: PDF / VT
PDF / VT основан на PDF / X и подходит для счетов-фактур и рекламы. Представьте себе PDF-файл со сложной графикой, но одна часть в нем - это ваше имя. Вместо того, чтобы постоянно воссоздавать PDF-файл с изменением только этой строки, PDF-файл просто содержит для него переменную.
Лучшее объяснение, которое я видел, было сделано prepressure.com и Довом Айзексом в его выступлении Техническое введение в PDF / VT.
Инжиниринг: PDF / E
PDF / E предназначен для разработки и довольно специализирован, как вы можете видеть из этой цитаты из Википедии:
[PDF / E предназначен] для создания документов, используемых в геопространственных, строительных и производственных рабочих процессах, и основан на Справочном документе PDF версии 1.6 […].
PDF и Python
Я потратил много времени на изучение различных библиотек, чтобы взаимодействовать с файлами PDF в Python. Следующее должно дать вам краткий обзор библиотек, с которыми я работал. Пожалуйста, дайте мне знать, если я пропустил хороший!
Чтение файлов PDF с помощью Python
Хотите узнать, как извлечь текст из файла PDF? Понял тебя:
PyMuPDF основан на C-библиотеке MuPDF, которая имеет двойную лицензию в соответствии с Стандартной общественной лицензией GNU Affero и коммерческой разрешительной лицензией.
Вы можете прочитать текст PDF-файла следующим образом:
import fitz # this is pymupdf
with fitz.open("my.pdf") as doc:
text = ""
for page in doc:
text += page.getText()
print(text)
Приемлемыми альтернативами могут быть:
- Pdfminer.six: это чистый модуль Python.
- PyPDF3 (GitHub): хотя последняя загруженная версия датирована 2021 годом, я не уверен, является ли она дополнительной поддержкой или действительно активно разрабатывается🤔 Я также не знаю никого, кто ее использует, и количество звезд на GitHub составляет подозрительно низкий.
Я рекомендую НЕ использовать следующие проекты:
- PyPDF2: многие учебники все еще используют это, но проект мертв. Последнее обновление - с 2016 года.
- PyPDF4: Этот проект так и не начался. Релиз был всего один, и это было в 2018 году.
- Pdfminer: Последняя обновленная версия от 2019 года. Проект мертв.
- Pikepdf основан на библиотеке C ++ qpdf, лицензированной Apache 2.0. Проект производит неплохое впечатление, но pikepdf не поддерживает чтение текста из файлов PDF.
Чтение таблиц из файлов PDF
Я потратил довольно много времени на решение этой проблемы, и это до смешного сложно. Вы должны знать, что таблицы не являются единым семантическим объектом в PDF. Это скорее абсолютно позиционированный текст. В худшем случае каждая буква может быть абсолютно позиционирована. Это просто кошмар, особенно если у вас есть нетривиальные структуры, такие как таблицы внутри таблиц, объединенные ячейки, невидимые границы, текст, выходящий за пределы столбца, ...
При этом есть Camelot и Java-проект Tabula с Python-оболочкой tabula-py. Я нашел примеры для обоих, где это работало хорошо, примеры, когда один из них или оба не удавались. Это просто сложная проблема 🤷♂️
Создание файлов PDF с помощью Python
Есть несколько способов, и я не могу сказать, что мне нравится какой-либо из них.
Что касается качества созданного PDF-файла, я был очень доволен переходом с LaTeX на PDF. Результаты, которые может дать LaTeX, просто прекрасны; посмотрите мои Примеры LaTeX. Однако вызывать pdflatex через подпроцесс просто неправильно. Настраивать LaTeX, когда вам нужна полная поддержка TeXLive, очень сложно. Однако это сработало.
Более простой подход преобразует HTML в PDF. Я был вполне доволен wkhtmltopdf. Я также видел pdfkit, упрощающий использование wkhtmltopdf. Я тоже пару лет назад наткнулся на weasyprint, но мне это не помогло. Не помню почему.
Reportlab - это распространенный подход к созданию файлов PDF непосредственно из Python. В качестве альтернативы, я бы попробовал pikepdf, если бы мне нужно было сделать это снова.