Стандарты, функции, использование, терминология

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-файл может выглядеть по-разному на разных устройствах или в разное время:

  1. Активное содержимое: PDF может содержать JavaScript и PostScript.
  2. Вложения: вложения могут содержать что угодно

Чтобы исправить эту проблему, были разработаны стандарты 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, если бы мне нужно было сделать это снова.