Обзор pdfresurrect: восстановление предыдущих ревизий и анализ структуры PDF
pdfresurrect — узкоспециализированная консольная утилита для анализа инкрементально сохранённых PDF. Она не показывает страницы, не редактирует текст и не выполняет OCR: её задача — найти цепочку предыдущих ревизий, показать изменения на уровне PDF-объектов и при необходимости записать обнаруженные версии в отдельные файлы. Такой профиль делает программу полезной прежде всего для цифровой криминалистики, расследования происхождения документа, проверки случайно оставленных данных и технической диагностики PDF, но одновременно накладывает серьёзные ограничения на современные файлы с cross-reference streams.
| Параметр | Состояние |
|---|---|
| Тип | Консольная утилита анализа ревизий PDF |
| Актуальная документированная версия | 0.23 |
| Автор проекта | Matt Davis; проект поддерживался также внешними участниками и пакетными мейнтейнерами |
| Основной формат | |
| Ключевые операции | подсчёт ревизий, объектная сводка, сведения Creator/Producer, извлечение предыдущих версий |
| Интерфейс | командная строка, без GUI |
| Платформы с подтверждёнными пакетами | Linux, macOS через MacPorts, FreeBSD; исходники рассчитаны на Unix-подобную сборку |
| Лицензия актуальной версии | BSD-3-Clause |
| Облако и аккаунт | не требуются; обработка локальная |
| Состояние upstream | версия 0.23 остаётся доступной и пакетируется, но заметного потока новых upstream-релизов после 2022 года не подтверждается |
Скачать pdfresurrect
Новейшая версия для Виндовс, macOS и Линукс. Удобный редактор PDF под российские реалии.
Безопасный способ получения зависит от системы. Для Debian и производных разумнее использовать пакет из репозитория дистрибутива: в Debian stable присутствует pdfresurrect 0.23-2 для нескольких архитектур, включая amd64, arm64, armel, armhf, i386, ppc64el, riscv64 и s390x. Установка выполняется штатным пакетным менеджером командой sudo apt install pdfresurrect. Такой вариант предпочтительнее ручной загрузки случайных бинарников: пакет проходит обычную инфраструктуру дистрибутива, устанавливает man-страницу и получает исправления сборки от сопровождающих Debian.
Fedora также продолжает публиковать пакет 0.23 в актуальных ветках; на момент проверки он есть в Fedora 43, Fedora 44 и Rawhide. Там типичный путь — sudo dnf install pdfresurrect. Для macOS подтверждён порт MacPorts версии 0.23: после установки MacPorts используется sudo port install pdfresurrect. MacPorts указывает платформу darwin и собирает программу с Clang. В FreeBSD доступен порт textproc/pdfresurrect, то есть программа не ограничена Linux, хотя универсального официального установщика для всех Unix-систем у проекта нет.
Если пакетного варианта нет, исходники следует брать из официального репозитория enferex/pdfresurrect. В README задокументирована классическая последовательность ./configure, затем make; при необходимости путь установки задаётся параметром —prefix, а make install копирует бинарник и man-страницу. Готового официального Windows-инсталлятора, приложения Microsoft Store или нативного графического клиента у pdfresurrect не подтверждено. Для Windows практичнее использовать Linux-среду, например отдельную виртуальную машину или WSL, но это уже окружение пользователя, а не заявленная upstream-платформа.
Что такое pdfresurrect
pdfresurrect появился как инструмент Matt Davis для извлечения истории, которая может оставаться внутри PDF после инкрементальных сохранений. PDF допускает добавление новой таблицы cross-reference и новых или изменённых объектов в конец файла вместо полной перезаписи документа. Поэтому один физический файл способен содержать несколько логических состояний. pdfresurrect ищет маркеры конца документа и связанные с ними xref-структуры, нумерует найденные ревизии и формирует представление о том, какие объекты добавлялись, изменялись или удалялись.
Это не система контроля версий и не способ восстановить любой удалённый текст. Утилита использует только данные, которые реально остались внутри PDF. Если редактор полностью переписал или очистил файл, старой ревизии может не быть; несколько EOF также не гарантируют содержательно разные страницы.
Позиционирование продукта ближе всего к инструментам цифровой криминалистики и низкоуровневой диагностики. Он уместен, когда нужно ответить на вопросы «сколько ревизий осталось внутри файла», «какие PDF-объекты менялись» и «можно ли открыть более раннее состояние». Для чтения документов логичнее использовать обычный просмотрщик, например PDF-XChange Viewer или Sumatra PDF; для полноценного редактирования — специализированный редактор наподобие Adobe Acrobat Pro.
На текущий момент продукт нельзя считать снятым с распространения: версия 0.23 присутствует в stable-репозитории Debian, современных Fedora и MacPorts. Но и называть его активно развивающимся upstream-проектом было бы некорректно: основная документация и ChangeLog версии 0.23 датируются 2022 годом, а заметного потока новых upstream-релизов после этого не подтверждается. Практический смысл такой ситуации прост: пакет всё ещё легко устанавливается, но при выборе для нового автоматизированного конвейера нужно заранее принять ограниченную функциональную эволюцию.
Хронология развития и поддержки
Первый публичный релиз, отражённый в ChangeLog, относится к августу 2008 года. В ранних версиях формировалась основная модель: поиск исторических xref, извлечение предыдущих состояний и анализ объектов. К 2009 году появились сведения о Creator и улучшения для linearized PDF, затем последовали исправления обработки EOF, безопасного чтения и разнообразных ошибок памяти.
Серия 0.15–0.22 в основном укрепляла надёжность: проверялись результаты fread/fseek, добавлялись границы буферов, устранялись повреждения памяти и потенциальные зависания. Версия 0.21 отдельно перевела режим scrub в экспериментальный статус. В 0.23 лицензия была заменена с GPLv3 на BSD 3-Clause, а также исправлен потенциальный бесконечный цикл, связанный с непроверенным fseek. Это важно при чтении старых инструкций: юридические условия и доступность scrub в них могут не соответствовать текущей ветке.
После 0.23 сопровождение заметно сместилось на уровень дистрибутивов: Debian, Fedora и MacPorts по-прежнему публикуют сборки. Поэтому старый upstream-релиз не означает недоступность, но совместимость с новыми конструкциями PDF нужно проверять отдельно.
Основные функции pdfresurrect
Подсчёт сохранённых ревизий
Ключевая быстрая операция — запуск с параметром -q. В этом режиме pdfresurrect выводит только число найденных версий для указанного PDF. Это удобно как фильтр перед глубокой обработкой: файл с единственной распознанной ревизией не требует извлечения истории, а документ с несколькими ревизиями можно отправить на дальнейший анализ. Важно понимать, что число отражает обнаруженную структурную историю, а не количество редакторских действий пользователя.
Сводка изменений по PDF-объектам
Без тихого режима программа строит сводку по объектам для обычных plaintext xref-таблиц. Для каждой ревизии выводятся признаки состояния объекта и попытка определить его тип. Такой отчёт помогает увидеть, что менялось между сохранениями: страницы, словари, потоки, метаданные и другие внутренние сущности. Однако README и man-страница прямо предупреждают, что определение типа объекта в verbose-выводе не всегда точно, а количество объектов может быть не абсолютно точным.
В linearized PDF общая линейная часть участвует в подсчёте логических версий, поэтому число объектов может выглядеть завышенным. Это особенность структуры, и трактовать счётчики без учёта linearization нельзя.
Извлечение предыдущих версий
Параметр -w включает запись результатов на диск. Исходный PDF при штатной операции открывается для чтения, а для результатов создаётся каталог с суффиксом -versions. В него записываются файлы вида имя-version-N.pdf и текстовая сводка с расширением .summary. Код извлечения копирует исходный PDF и добавляет финальный startxref, указывающий на более раннюю xref-позицию; таким образом создаётся новый файл, который совместимый PDF-ридер должен интерпретировать как старое состояние.
Существующий каталог результатов не перезаписывается: если папка с ожидаемым именем уже есть, программа сообщает об этом и прекращает извлечение. Это защищает предыдущий набор артефактов от случайной замены, но требует дисциплины при повторных запусках — удалить старый каталог, переименовать его или работать в отдельной директории.
Информация о создателе документа
Опция -i выводит версию PDF и доступные поля информационного словаря, которые программа умеет распознавать: Title, Author, Subject, Keywords, Creator, Producer, CreationDate, ModDate и Trapped. Эти значения полезны как контекст, но не являются доказательством авторства сами по себе: метаданные PDF могут отсутствовать, быть изменены или сформированы программой автоматически.
Экспериментальный scrub
В старых описаниях встречается функция «scrub», предназначенная для зануления старых экземпляров изменённых или удалённых объектов. В актуальном исходном коде ветки 0.23 она не входит в обычную строку использования: обработчик -s компилируется только при специальном PDFRESURRECT_EXPERIMENTAL. Более того, README предупреждает, что этой функции нельзя доверять для серьёзных задач безопасности и что результат, вероятно, не будет корректно отображаться как рабочий PDF. Поэтому scrub нельзя рассматривать как надёжный инструмент удаления конфиденциальной истории.
Для безопасной публикации лучше создать полностью переписанную финальную копию и перепроверить её независимыми анализаторами. Редакторы вроде PDF-XChange Editor решают другую задачу и сами по себе не заменяют криминалистическую верификацию.
Интерфейс и удобство использования
У pdfresurrect нет окон, панелей инструментов, предпросмотра страниц и мастеров. Рабочая зона — терминал и файловая система. Базовый синтаксис короткий: имя команды, путь к PDF и один или несколько параметров -i, -w или -q. Для специалиста, привыкшего к CLI, это снижает количество действий; для пользователя, ожидающего визуального сравнения страниц, порог освоения заметно выше.
Логика навигации фактически заменена последовательностью «проанализировать → получить сводку → при необходимости извлечь версии → открыть результаты во внешнем просмотрщике». pdfresurrect сам не рендерит страницы, поэтому для проверки нужно второе приложение. На Windows эту роль удобно поручить лёгкому просмотрщику; на Linux или macOS — любому совместимому PDF-ридеру. Если требуется визуально сопоставлять версии, следует открывать созданные файлы попарно и сравнивать страницы отдельно.
Плюс такого интерфейса — предсказуемая автоматизация. Команда pdfresurrect file.pdf -q пригодна для shell-скрипта, а -w создаёт структурированный каталог результатов. Минус — вывод ориентирован на внутренние объекты PDF и не переводит изменения в пользовательские формулировки вроде «на странице 3 удалена фамилия». Комментарий в исходном коде показывает, что привязка объекта к странице оставлена как незавершённая часть, поэтому пользователю приходится интерпретировать отчёт самостоятельно.
Поддерживаемые форматы и совместимость
Входной формат фактически один — PDF. Программа проверяет наличие заголовка %PDF- в первых 1024 байтах и извлекает номер версии формата. Импорт DOCX, ODT, изображений, EPUB, XPS или сканов как самостоятельных форматов не предусмотрен. OCR также отсутствует: если страница представляет собой изображение, pdfresurrect не распознаёт текст и не преобразует его в поисковый слой.
Результаты -w остаются PDF, дополнительно создаётся текстовая .summary-сводка. Экспорта истории в Word, HTML, JSON или изображения нет; для этого потребуется отдельный инструмент.
Обычные xref-таблицы и xref streams
Лучше всего реализован сценарий с классическими plaintext cross-reference tables. Для них pdfresurrect читает записи объектов и строит детальную сводку. PDF 1.5 и новее могут хранить xref в потоках. Исходный код 0.23 распознаёт такой объект как stream, но функция загрузки xref-stream содержит явный TODO на декодирование и анализ; при обнаружении таких структур итоговый отчёт сообщает, что объектная сводка недоступна. Это одно из главных технических ограничений программы на современных PDF.
Версия PDF 1.5+ сама по себе не означает отказ: конкретный файл может использовать обычный xref. Но при xref streams для глубокого просмотра разумно подключить qpdf или mutool show.
Совместимость извлечённых версий
Метод восстановления предполагает, что внешнее приложение чтения PDF будет считать последнюю xref-таблицу в созданном файле наиболее актуальной. README отмечает, что обычно это так, но это всё же предположение совместимости, а не гарантия одинакового поведения любого PDF-движка. Поэтому после извлечения нужно открыть каждую версию как минимум в одном надёжном ридере и проверить число страниц, содержимое и отсутствие ошибок.
В рамках сайта полезно отделять анализ структуры от повседневного чтения. Okular и другие просмотрщики ориентированы на отображение документов, тогда как pdfresurrect вообще не имеет страницы просмотра. Совместное использование логично: pdfresurrect извлекает ревизии, просмотрщик подтверждает визуальный результат.
Паспорт обратимости операций
| Операция | Что происходит | Обратимость и риск |
|---|---|---|
| Обычный анализ | чтение структуры и вывод сводки в терминал | исходный PDF не изменяется |
| -q | выводится только число найденных ревизий | полностью безопасно для исходника; создаваемых файлов нет |
| -i | читаются доступные поля Creator/Producer и другие Info-поля | исходник остаётся без изменений |
| -w | создаётся отдельный каталог, PDF-версии и .summary | оригинал сохраняется; результаты можно удалить отдельно |
| Экспериментальный scrub | в специальной сборке создаётся отдельный файл с попыткой занулить старые объекты | не подходит для надёжной санитизации; результат нужно проверять независимыми средствами |
Для форензики важна неизменность оригинала: работайте с копией, заранее фиксируйте хеш исходника и храните извлечённые версии отдельно, чтобы не перепутать их с доказательным артефактом.
Результат -w переносим в другое PDF-ПО как обычный PDF-файл, однако он создан нестандартным приёмом переадресации startxref на более раннее состояние. Поэтому «открывается у меня» не равно «исторически точен во всех деталях». Проверка должна включать визуальное открытие и, при критичных задачах, вторую низкоуровневую утилиту.
Производительность и стабильность
Официальных бенчмарков скорости, памяти и максимального размера файла нет. Программа написана на C и не содержит графического стека; небольшой размер пакета не следует путать с реальным расходом памяти на больших PDF.
При анализе программа проходит структуру файла, ищет EOF и xref, загружает массивы записей и формирует сводку. На документе с огромным количеством объектов объём памяти будет зависеть от числа xref-записей и извлекаемых данных. Главная практическая стоимость режима -w — диск: функция записи каждой версии копирует весь исходный PDF и дописывает новый startxref. Поэтому при N найденных ревизиях итоговая папка может занимать величину порядка N копий исходника, а не только размер различий. Для многогигабайтных PDF это важнее размера самой программы.
В 0.23 исправлен потенциальный бесконечный цикл из-за непроверенного fseek; предыдущие релизы также закрывали ошибки памяти и буферов. Поэтому использовать следует 0.23 или пакетную сборку на её основе, а не старый архивный бинарник.
Стабильность результата ограничивается сложностью самого PDF. Man-страница предупреждает, что типы объектов и их количество в verbose-сводке могут определяться неточно. Xref streams распознаются, но не декодируются для объектного анализа. Повреждённый PDF может привести к диагностике об ошибке структуры или невозможности найти ожидаемый xref. Такие сообщения нужно трактовать как ограничение разбора, а не автоматически как доказательство повреждения документа.
Карта критических зависимостей
Аккаунт: не нужен. Интернет: нужен только для получения пакета или исходников; анализ выполняется локально. Облако: отсутствует, PDF не требуется загружать на сторонний сервер. Лицензионный сервер: отсутствует. Рендерер: не встроен, поэтому для визуальной проверки извлечённых версий нужен отдельный PDF-просмотрщик.
Системные библиотеки: пакет Debian зависит от libc6, исходная сборка использует стандартный C-компилятор и проверяет POSIX-подобные функции и заголовки. Структурная зависимость: качество анализа прямо связано с тем, как конкретный PDF хранит xref и incremental updates. Именно это, а не мощность компьютера, чаще определяет успешность работы.
Файловая система: режим -w должен иметь право создавать каталог и несколько файлов. Имя каталога генерируется из базового имени PDF; если он уже существует, операция прекращается. Для автоматизации это нужно учитывать заранее и создавать отдельную рабочую директорию на каждый запуск.
Лицензирование и версии
Актуальная ветка 0.23 распространяется по BSD 3-Clause. Лицензия разрешает использование, модификацию и распространение исходного или бинарного кода при сохранении уведомлений и соблюдении условий об именах правообладателей. Подписки, платной редакции, ограничений по числу документов, регистрации, водяных знаков или пробного периода у проекта нет.
Путаница возникает из-за истории лицензирования. До 0.23 в документации использовалась GPLv3, и старые man-страницы или каталоги программ могут продолжать показывать GPL. ChangeLog версии 0.23 явно фиксирует смену на BSD 3-Clause, а актуальный LICENSE в репозитории соответствует BSD. Для юридической оценки конкретного старого бинарника нужно смотреть лицензию именно той версии, а не переносить условия 0.23 назад.
Отдельных Home, Pro, Enterprise или Server-редакций нет. Различия между пакетами Debian, Fedora, MacPorts и FreeBSD относятся к способу сборки и сопровождению дистрибутивом, а не к функциональным тарифам. Это упрощает внедрение: функциональность определяется одной кодовой базой, а не купленной лицензией.
Системные требования
Linux
Upstream не задаёт минимум по ядру, RAM или CPU. Практический ориентир — требования пакета своего дистрибутива: Debian stable и современные Fedora публикуют 0.23, а конкретную архитектуру следует проверять в репозитории системы.
macOS
MacPorts публикует pdfresurrect 0.23 для darwin и собирает его с Clang. На странице сборок есть успешные результаты как для Intel, так и для arm64 на нескольких поколениях macOS. Практическое требование — установленный и настроенный MacPorts; отдельного .app с графическим интерфейсом нет.
FreeBSD и сборка из исходников
FreeBSD имеет порт textproc/pdfresurrect. Для ручной сборки upstream использует configure и make; configure проверяет C-компилятор, stdlib.h, string.h, dirent и функции вроде mkdir, strchr, strrchr, strstr, strdup и strtol. README указывает стандартный префикс /usr/local и возможность изменить его через —prefix. Специальных внешних PDF-библиотек в Makefile не заявлено.
Windows
Нативные официальные требования для Windows не опубликованы, потому что готовый Windows-порт не подтверждён. Не следует выдавать запуск через WSL, Cygwin или стороннюю сборку за официальный Windows-релиз. Если инфраструктура организации стандартизирована на Windows, удобнее держать pdfresurrect в контролируемой Linux-среде и передавать туда копии файлов.
Преимущества и недостатки pdfresurrect
Плюсы и минусы
Очень узкая специализация. Инструмент делает именно анализ incremental revisions и не маскирует эту функцию за большим PDF-комбайном.
Локальная обработка. Документ не нужно загружать в облако, создавать аккаунт или передавать внешнему сервису.
Неизменность исходника в штатных режимах. Анализ читает оригинал, а -w пишет отдельные файлы.
Простая автоматизация. Параметр -q легко включается в shell-конвейер, а результаты -w имеют предсказуемые имена.
Свободная лицензия BSD-3-Clause. Нет подписки, активации и функциональных тарифов.
Пакеты в актуальных Unix-подобных системах. Программа остаётся доступной в Debian, Fedora, MacPorts и FreeBSD.
Полезность для форензики. Возможность увидеть старое состояние PDF закрывает задачу, которой обычные редакторы и ридеры обычно не занимаются.
Минусы
Нет GUI и рендера. Визуальную проверку всегда приходится делать внешней программой.
Слабая поддержка xref streams. В 0.23 их декодирование для объектной сводки не реализовано.
Сводка требует экспертной интерпретации. Программа показывает PDF-объекты, а не понятные пользователю изменения страниц.
Нет OCR, конвертации и редактора. Это не универсальный инструмент документов.
Upstream-релиз 0.23 не новый. Современные дистрибутивы продолжают его пакетировать, но ожидать активного расширения функций нельзя.
Экспериментальный scrub непригоден как гарантия удаления секретов. Сам README требует независимой проверки и предупреждает о вероятно нерабочем PDF.
Режим извлечения расходует диск. Каждая версия создаётся как отдельная почти полная копия файла.
Сравнение с аналогами
Прямого аналога один в один у pdfresurrect немного: часть утилит анализирует объекты, часть переписывает структуру, часть только показывает документ. Поэтому полезнее сравнивать по задачам, а не объявлять один продукт «лучшим» вообще.
| Инструмент | Главная задача | Предыдущие ревизии | Низкоуровневые объекты | Визуальный просмотр | Типичный выбор |
|---|---|---|---|---|---|
| pdfresurrect | история incremental saves | сильная сторона | сводка для plaintext xref | нет | быстро извлечь старые состояния |
| qpdf | структурная обработка и преобразование PDF | не его основной UX | да, включая JSON-представление | нет | глубокая автоматизация и современная структура PDF |
| pdf-parser.py | форензика и поиск PDF-объектов | не основная функция восстановления версий | да | нет | анализ подозрительных объектов, JavaScript и потоков |
| mutool show | просмотр внутренних объектов через MuPDF | не специализирован на истории | да, xref, trailer, streams | отдельные команды MuPDF умеют рендер | диагностика современных PDF и проверка структуры |
| Sumatra PDF | быстрое чтение документов в Windows | нет специализированного восстановления истории | не основной сценарий GUI | да | проверить, как выглядит исходник и извлечённые версии |
qpdf сильнее в современной структурной обработке и JSON-представлении объектов; pdf-parser.py удобен для поиска подозрительных объектов, строк и потоков; mutool show показывает trailer, xref и streams. pdfresurrect проще именно для вопроса о прошлых incremental revisions. Если же нужна компоновка страниц, уместнее PDFsam Basic.
Sumatra PDF находится на противоположной стороне рабочего процесса. Это прежде всего лёгкий Windows-просмотрщик множества документных форматов. Он не заменяет pdfresurrect как форензический анализатор, зато удобен для визуальной проверки извлечённых PDF. Сравнивать их по «функциональности PDF» некорректно: pdfresurrect отвечает на вопрос о прошлых ревизиях, Sumatra — быстро показывает текущее содержимое файла.
Инструкция по установке
Debian и совместимые системы
Обновите индекс пакетов стандартным для своей системы способом.
Установите пакет командой sudo apt install pdfresurrect.
Запустите pdfresurrect без аргументов и убедитесь, что выводится версия и краткая строка Usage.
Для безопасной первой проверки используйте копию PDF и команду pdfresurrect sample.pdf -q.
Для удаления используйте sudo apt remove pdfresurrect; пользовательские каталоги результатов удаляются отдельно.
Fedora
Убедитесь, что подключены стандартные репозитории выпуска.
Установите пакет командой sudo dnf install pdfresurrect.
Проверьте запуск без аргументов и затем выполните -q на тестовой копии документа.
macOS через MacPorts
Установите MacPorts, соответствующий своей версии macOS, если его ещё нет.
В Terminal выполните sudo port install pdfresurrect.
Команда port contents pdfresurrect покажет установленные портом файлы; обновление и удаление выполняются штатными средствами MacPorts.
Сборка из исходников
Получите исходники из официального репозитория и перейдите в корневую директорию проекта.
Выполните ./configure. Для отдельного префикса укажите ./configure —prefix=/нужный/путь.
Соберите программу командой make.
Запустите полученный бинарник локально и убедитесь, что он сообщает версию 0.23 и параметры -i, -w, -q.
При необходимости установите через make install. README также предусматривает make uninstall для удаления файлов, установленных этим Makefile.
Экспериментальный режим scrub не следует включать «заодно» при сборке. Он не документирован как штатная опция пользовательской версии 0.23 и не даёт гарантии безопасной очистки истории. Первый запуск лучше ограничить чтением копии документа и подсчётом ревизий.
Практические кейсы
Проверить, хранит ли PDF несколько ревизий
Цель: понять, есть ли история. Подготовка: сделать копию файла. Шаги: выполнить pdfresurrect document.pdf -q. Проверка: если версий больше одной, запустить анализ без -q. Ограничение: число ревизий не описывает характер изменений.
Извлечь старые состояния для визуального сравнения
Цель: получить отдельные PDF. Подготовка: убедиться, что каталога document-versions нет и места хватит на несколько копий. Шаги: выполнить pdfresurrect document.pdf -w. Проверка: открыть version-N во внешнем ридере и изучить .summary. Ограничение: результат зависит от интерпретации startxref PDF-движком.
Получить метаданные по ревизиям
Цель: получить Creator/Producer и временные поля. Шаги: выполнить pdfresurrect document.pdf -i. Проверка: сопоставить CreationDate, ModDate, Creator и Producer. Ограничение: метаданные изменяемы и не доказывают авторство без внешней проверки.
Разобрать файл, где объектная сводка недоступна
Цель: разобрать xref stream. Шаги: открыть trailer/xref через qpdf JSON или mutool show и сопоставить со счётчиком ревизий pdfresurrect. Проверка: второй инструмент должен показывать объекты потока. Ограничение: отчёты двух программ не объединяются автоматически.
Навигатор по сбоям
| Симптом | Проверка | Вероятная причина | Безопасное действие | Контроль |
|---|---|---|---|---|
| «There is only one version» | повторить с -q | история не сохранена или не распознана | не пытаться «восстановить» несуществующие версии; проверить структуру вторым инструментом | сравнить число EOF/xref в qpdf или mutool |
| Каталог результатов уже существует | проверить содержимое папки | предыдущий запуск оставил -versions | переименовать каталог или создать новую рабочую директорию | новый запуск должен создать отдельный набор без перезаписи |
| Объектная сводка недоступна | найти сообщение про cross reference streams | xref хранится в stream | использовать qpdf или mutool для низкоуровневого просмотра | убедиться, что trailer/xref читаются вторым инструментом |
| Извлечённый PDF не открывается | попробовать другой ридер и проверить summary | особенности xref, повреждение или несовместимость восстановленного состояния | не изменять оригинал; сохранить неудачный результат как артефакт и анализировать структуру | сопоставить с исходным файлом и другой утилитой |
| Нужно удалить скрытую историю | не полагаться на экспериментальный scrub | режим не гарантирует рабочий или безопасно очищенный PDF | создать заново переписанную копию надёжным инструментом и выполнить независимую проверку | повторно анализировать финальный файл несколькими средствами |
Подготовить PDF к безопасной передаче после расследования
Цель: не передать старые состояния. Шаги: сохранить оригинал, создать полностью переписанную финальную копию, затем проверить её через -q и независимый анализатор. Проверка: файл должен открываться корректно и не показывать неожиданную цепочку ревизий. Ограничение: это не заменяет аудит вложений, метаданных и аннотаций.
Если задача связана не с историей, а с обычной организацией страниц, разумнее использовать специализированный инструмент. Например, PDF24 Creator рассчитан на повседневные PDF-операции в Windows, тогда как pdfresurrect следует оставлять для технического анализа.
Часто задаваемые вопросы
Может ли pdfresurrect восстановить удалённый текст из любого PDF?
Нет. Он способен использовать предыдущие инкрементальные состояния только тогда, когда они реально сохранились внутри файла и структура доступна его анализатору. Полностью переписанный, оптимизированный или очищенный PDF может не содержать старой версии.
Можно ли использовать pdfresurrect для вредоносных PDF?
Да, как один из элементов офлайн-анализа структуры, но это не антивирус и не песочница. Подозрительный файл следует обрабатывать в изолированной среде, не открывать активное содержимое в небезопасном просмотрщике и дополнять pdfresurrect инструментами, рассчитанными на JavaScript, вложения и декодирование потоков.
Почему старые страницы называют лицензию GPL?
Потому что до версии 0.23 проект действительно использовал GPLv3. В 0.23 лицензия изменена на BSD 3-Clause. Для конкретной копии программы ориентируйтесь на LICENSE и пакетные метаданные соответствующей версии.
Подходит ли pdfresurrect вместо Sumatra PDF?
Нет. Sumatra PDF — просмотрщик и инструмент чтения, а pdfresurrect — форензическая CLI-утилита. Их разумно использовать вместе: один извлекает исторические состояния, другой помогает визуально проверить PDF.
Стоит ли применять scrub перед отправкой конфиденциального документа?
Нет как единственный способ. README прямо предупреждает, что экспериментальный scrub нельзя считать надёжной защитной функцией и что он может создать неработающий PDF. Для санитизации нужен отдельный проверенный процесс и последующая независимая проверка.
Что делать, если нужен редактируемый документ после восстановления?
Сначала извлеките и проверьте нужную PDF-версию, затем используйте отдельный редактор или конвертер. Например, Master PDF Editor относится к классу визуальных редакторов; pdfresurrect сам не экспортирует содержимое в редактируемый офисный формат.
Вывод
pdfresurrect остаётся полезным нишевым инструментом там, где важна не текущая страница PDF, а его внутренняя история. Он компактный, работает локально, не требует аккаунта, сохраняет исходник в штатном сценарии и позволяет быстро подсчитать ревизии или записать прежние состояния в отдельные файлы. Для цифровой криминалистики, аудита документов и исследования случайно оставленных incremental updates это ясная и воспроизводимая модель работы.
Главное ограничение — неполная работа с xref streams. Утилита не заменяет qpdf, pdf-parser.py или mutool для глубокого разбора, а также просмотрщик, редактор или OCR. Экспериментальный scrub нельзя считать гарантией удаления конфиденциальных данных.
Выбирать pdfresurrect разумно, если нужен конкретный ответ о сохранённых ревизиях и есть готовность проверять результат вторым инструментом. Для чтения лучше Sumatra PDF или другой ридер; для редактирования и компоновки — полноценный PDF-редактор; для автоматизированной структурной обработки современных файлов — qpdf или MuPDF. В такой роли pdfresurrect не конкурирует с универсальными пакетами, а закрывает одну специфическую задачу достаточно прозрачно.