Парсинг удаленных PDF-файлов

Я пытаюсь сделать файл вырезания на диске с C ++. Я не могу найти в Интернете никаких ресурсов, связанных со структурой файла PDF на диске. Дело в том, что я могу найти токен% PDF-1.x в начале кластера, но нигде не могу определить размер файла PDF.

Предположим гипотетически, что запись файловой системы для этого конкретного документа потеряна. Я нахожу начало документа и продолжаю читать, пока не столкнусь с «startxref». число %% EOF «. Дело в том, что я не знаю, когда остановиться, поскольку в содержимом документа есть несколько маркеров» %% EOF «.

Я попытался остановиться после прочтения, скажем, 10 кластеров, и не нашел ни одного конкретного PDF-ключевого слова, такого как «obj», «stream», «trailer», «xref». Но это совершенно произвольно, и это не детерминистический метод поиска конца документа, поэтому я могу определить его размер.

Я также видел некоторые «Длина число«маркеры в начале некоторых» объектов «, но число не соответствует большинству времени.

Любые идеи о том, что я могу попробовать дальше? Есть ли способ определить точный размер всего документа? Я заинтересован в восстановлении документов программно.

0

Решение

Поскольку PDF-файлы являются «свободным форматом» (в значительной степени похожим на текстовые файлы, но с меньшей очевидностью для людей, когда речь заходит о «чтении» содержимого), вероятно, их будет сложно собрать воедино, если они не в порядке.

stream имеет длину, которая является ключом к тому, где endstream идет. (Пустая строка до и после самого потока). Потоки используются для введения в документ растровых изображений и подобных вещей (шрифты, штриховые рисунки в сжатом виде и т. Д.). Но если у вас есть несколько сегментов по 4 КБ, которые могут войти в один и тот же блок в середине потока, то нет никакого способа определить, каким путем они идут, кроме как вставить его вместе и посмотреть, какие из них выглядят вменяемыми, а какие нет. Точно так же, если есть несколько сегментов потоков и объектов, вы не можете точно сказать, куда и куда.

Конечно, это относится почти ко всем типам файлов с «переменным содержимым» — вы можете найти первые несколько килобайт JPG, но знать, что такое REST of of, будет непросто — только визуальный осмотр содержимого Можете ли вы определить, к каким блокам принадлежат блоки, если — если вы ошиблись, вы, вероятно, просто получите какой-то случайный мусор.

1

Другие решения

Инструмент с открытым исходным кодом bulk_extractor имеет модуль под названием scan_pdf это делает в значительной степени то, что вы описываете здесь. Он может распознавать отдельные части файла PDF на диске, автоматически распаковывает сжатые области и извлекает текст, используя две стратегии. Он восстановит данные из фрагментов PDF, даже если xref таблица не может быть найдена.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector