
Невидимый текстовый слой PDF можно редактировать и экспортировать в Markdown, JSON и TXT. Такие документы называются адаптивными PDF, они созданы для чтения и людьми, и роботами. Люди видят обычный PDF, а роботы — отдельный слой ActualText с текстом в Markdown и картинками в base64.
Как это работает
В спецификации PDF (с версии PDF 1.4, 2001) есть свойство для указания «текста замещения» к выделенному контенту. Программы рендеринга игнорируют текст замещения и просто выводят на экран то, что указано в основном потоке. Но программы для извлечения текста PyMuPDF, Poppler и др. поддерживают этот слой.
Этот слой разработан для указания лигатур и символов, которые не соответствуют стандарту Unicode. Например, визуальный глиф “fi” в этом текстовом слое указывается как два отдельных символа “f” и “i”.
Но сейчас, в эпоху автоматизированных инструментов для обработки PDF, этот слой начали использовать специально для экспорта в LLM. Текст замещения прикрепляется к основному потоку контента через последовательности размеченного содержимого (Tagged PDF), так что экстракторы возвращают структурированный Markdown. Таким образом, обычный рендеринг PDF работает как и раньше, а вот в LLM загружается слой с размеченным текстом.
Адаптивный PDF
Конвертацию выполняют утилиты вроде Adaptivepdf.
Для примера, примерно так выглядит текст в PDF до конвертации:
Quarterly Infrastructure Report Overview Cloud migration completed ahead of sch edule. Three critical services were moved to the new cluster. Key Metrics Uptime: 99.97% Latency: 42ms avg (down from 68ms) Cost: $12,400/mo (down 34%) Action Items Migrate remaining batch jobs by Q3 Set up automated failover for db-west Review cost allocation per team
Умный PDF после конвертации:
# Quarterly Infrastructure Report ## Overview Cloud migration completed ahead of schedule. Three critical services were moved to the new cluster. ## Key Metrics | Metric | Value | |---------|---------------------------| | Uptime | 99.97% | | Latency | 42ms avg (down from 68ms) | | Cost | $12,400/mo (down 34%) | ## Action Items - Migrate remaining batch jobs by Q3 - Set up automated failover for db-west - Review cost allocation per team
Утилита доступна в онлайновой версии. Для обработки файлов применяется питоновская библиотека Pymupdf, в том числе расширение Pymupdf4llm, которое преобразует PDF в чистый, структурированный документ.

Конвертер распознаёт PDF, извлекает и форматирует текст и картинки, а затем позволяет отредактировать документ в браузере и сохранить результат в .md или новый .pdf.
Бэкенд работает и локально (нужен Python 3.12 и менеджер пакетов uv):
Скрипт для установки uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
Клонируем репозиторий:
git clone https://github.com/iminoaru/adaptivepdf
В репозитории две папки: /pdx (конвертер) и /viewer (программа просмотра и редактор на Next.js).
Запуск конвертера:
cd adaptivepdf/pdx uv sync uv run uvicorn api:app --reload --port 8000

Теперь запускаем программу просмотра (viewer) в другой консоли:
cd adaptivepdf/viewer npm install npm run dev

После этого можно открывать в браузере http://localhost:3000 — и загружать PDF. Программа просмотра по умолчанию использует http://localhost:8000, но это можно изменить переменной NEXT_PUBLIC_API_URL в настройках.

Примечание. Теоретически, невидимый (для людей) слой с текстом можно использовать для направленных атак, размещая там скрытые промты. Например, для обхода HR-ботов, которые сканируют резюме кандидатов:

Pymupdf4llm
Вышеупомянутая утилита Pymupdf4llm требует минимальной настройки и работает из коробки, конвертер не нуждается в GPU-ускорителе и не выдвигает особых требований к памяти.
Pymupdf4llm может извлекать данные в Markdown, JSON и TXT, поддерживает интеграции с LlamaIndex и LangChain.
Другие функции:
Обработка страниц, свёрстанных в несколько столбцов
Извлечение изображений и векторной графики
Анализ макета для лучшего семантического понимания структуры документа
Поддержка вывода страниц по частям (page chunking)
Автоматическое обнаружение страниц, которые нуждаются в OCR, и поддержка различных OCR-движков
Есть также программные интерфейсы Pymupdf4llm для интеграции библиотеки в сторонние сервисы.
Void-Cowboy
не теоретически, а практически
пол года назад было "собеседование" где восторгались моими проектами и прочим, при том что мне изначально подозрительными показались потому резюме было даже без фото и только контакты.
Только через неделю мне внезапно дошло что я им сгенерировал резюме через свой генератор, в который полтора года назад встроил пром-иньекцию белыми буквами на белом фоне в начале резюме.
по статье - проект интересный, если бы не питон только. Спасибо что не нода, но питон на втором месте по "гениальности" в качестве использования как бек-енд. Куча ресурсов, танцы с запусками (нужная версия, нужные версии либ и тд) И контейнерной версии у них нет.
вообщем как решение для замены старых редакторов когда нужно поковырять pdf такое себе
economist75
Практически, а не теоретически:
никто языки по “гениальности” не ранжирует, нет такой метрики ни у кого и нигде (это идея для стартапа);
куча ресурсов для python - притянуто за уши. Но работать с жирными PDF принято на жирном железе;
танцы с запуском были, но закончились год назад с появлением uv run <script.py> - он скачивает нужный питон, либы, создает окружение и запускает все даже без установки. От контейнерной изоляции это не отличается почти ничем;
контейнерная эйфория прошла. Создавать и тягать образы в сотни раз превышающие “полезную нагрузку” из-за копеечных микросервисов или IT-страхов - не лучшая стратегия при дороговизне памяти и носителей. Тут работает естественный отбор. Когда средний возраст HDD на серверах в МСБ массово переваливает за 10 лет - докеромания становится узким местом и самовыпиливается. Главное действовать спокойно - ведь спешка ни к чему (хорошему) не приводит.