Itinai.com two developers coding side by side in a minimalist 9e46852c 56ad 43df b8ce 5a8451c13b63 2

Как избавиться от хаоса PDF: простой пайплайн Docling Parse

Itinai.com two developers coding side by side in a minimalist 9e46852c 56ad 43df b8ce 5a8451c13b63 2

Что делает пример кода и зачем он вам нужен

В статье разложим по полочкам два небольших скрипта на Python, которые генерируют тестовый PDF‑документ — с векторными элементами, таблицей и встроенным растровым изображением. Такие файлы часто используют в проекте по извлечению текста и структуры из PDF. Если вы уже пробовали парсить документы, знаете, как сложно отладить алгоритм без «идеального» теста, то этот генератор будет полезным.

Как работает create_demo_image

Функция создает простое изображение 320×180 px, рисует:

  • прямоугольник,
  • эллипс,
  • линию,
  • текст «Embedded bitmap image».

Все элементы рисуются библиотекой Pillow. После создания файл сохраняется в путь, указанный в переменной DEMO_IMAGE_PATH. Этот PNG потом будет встроен в PDF‑страницу, позволяя проверить, умеет ли ваш парсер работать с bitmap‑ресурсами.

Как генерируется PDF в build_pdf

Для построения PDF используется ReportLab. Основные шаги:

  • Создаём canvas.Canvas с форматом A4.
  • Пишем заголовки и абзацы разного размера шрифтов.
  • Рисуем два столбца текста, чтобы проверить, умеет ли парсер различать колонки.
  • Добавляем векторные фигуры (прямоугольники, круг, линия) — они помогут понять, правильно ли ваш движок извлекает path‑данные.
  • С помощью Table формируем простую «таблицу‑псевдо», где каждая ячейка имеет координаты. Это удобно для тестов, где нужен вывод cell‑level информации.
  • На второй странице вставляем ранее созданный bitmap‑рисунок, несколько блоков текста и обводку — всё это позволяет проверить, сохраняются ли координаты при разных типах контента.
  • В конце вызываем c.save(), получая готовый файл PDF_PATH.

Зачем нужен такой PDF в работе парсера

Большинство решений (например, pdf2data, unstructured) опираются на два источника информации:

  • Текст + координаты — позволяют восстанавливать порядок чтения, группировать слова в строки и блоки.
  • Векторные и растровые ресурсы — важны для извлечения схем, диаграмм и построения визуального представления документа.

Тестовый PDF, созданный этим скриптом, покрывает все вышеперечисленные случаи, поэтому его удобно включать в юнит‑тесты и в pipeline CI.

Как быстро запустить генерацию

Скопируйте код в файл demo_pdf.py, установите зависимости и выполните:

  • pip install pillow reportlab
  • Определите переменные DEMO_IMAGE_PATH и PDF_PATH (например, Path("demo.png") и Path("demo.pdf")).
  • Запустите python demo_pdf.py.

После выполнения получите два файла: demo.png и demo.pdf. Откройте PDF в любой программе‑читалке — увидите всё, что описано выше.

Что проверять после генерации

  • Наличие текста с корректными координатами (обычно в bbox‑полях).
  • Корректный разбор колонок: левый и правый блоки должны сохранять свои x— и y-границы.
  • Экспорт векторных элементов: проверьте, что path‑команды (move, line, curve) попали в структуру.
  • Встроенное изображение: убедитесь, что парсер возвращает метаданные о bitmap‑ресурсе (тип, размер, позиция).
  • Таблица: каждую ячейку нужно видеть как отдельный объект с координатами и текстом.

Где искать «первоисточники»

Для более глубокого погружения обратитесь к официальной документации:

Краткий чек‑лист для интеграции в ваш pipeline

  • Автоматически генерировать PDF перед запуском тестов.
  • Запускать ваш парсер и сохранять результат в JSON/YAML.
  • Сравнивать полученные координаты и типы объектов с ожидаемыми (можно использовать pytest‑approx).
  • Логировать любые отклонения и фиксировать их в баг‑трэкинге.

С этим «тестовым полигоном» вы сможете быстрее отлаживать извлечение структуры и уверенно выпускать новые версии своего PDF‑парсера.

Запустите свой ИИ проект бесплатно

ИИ-агенты искусственный интеллект онлайн для бизнеса

Лучший ИИ онлайн