Извлечение и повторная оценка PDF-файла с использованием Origami

Это касается Origami, инструмента Ruby для изучения файлов PDF по адресу http://esec-lab.sogeti.com/pages/Origami

В качестве примера я пытаюсь открыть файл PDF, извлечь его, а затем переписать оригинальный PDF. Это полный код, который я пытаюсь использовать для достижения этой цели:

hg clone https://code.google.com/p/origami-pdf/
cd origami-pdf/
rake
cd ..
curl 'http://www.ada.gov/hospcombrprt.pdf' -o hospcombrprt.pdf
origami-pdf/bin/pdf2ruby -x hospcombrprt.pdf
mv hospcombrprt.pdf hospcombrprtORIG.pdf
cd hospcombrprt
ruby hospcombrprt.rb # THIS STEP PRODUCES ERRORS
bc hospcombrprt.pdf ../hospcombrprtORIG.pdf || echo FAILED

Однако это приводит к следующей ошибке:

/Users/williamentriken/Developer/origami-pdf/lib/origami/page.rb:75:in `pages': Invalid page tree (Origami::InvalidPDFError)
    from /Users/williamentriken/Developer/origami-pdf/lib/origami/pdf.rb:689:in `compile'
    from /Users/williamentriken/Developer/origami-pdf/lib/origami/pdf.rb:233:in `save'
    from hospcombrprt.rb:189:in `<main>'

Кто-нибудь еще имел успех в выполнении этой операции с использованием этой библиотеки, и не могли бы вы поделиться?

1 ответ

Исходное сообщение:

Некоторое время я играл с библиотекой, но продолжал получать ошибки и незначительные ошибки, такие как реплицированные страницы и пропущенные страницы...

... вы должны прочитать комментарии авторов об ограничениях использования библиотеки оригами.

Я рекомендую гем comb_pdf, он отлично подходит для простых манипуляций с pdf, таких как слияние, штамповка и тому подобное.

обновление:

Я посмотрел на конкретный файл PDF, и это может быть проблема, связанная с неподдерживаемой версией PDF.

Файл http://www.ada.gov/hospcombrprt.pdf зашифрован с использованием шифрования типа 4, которое в соответствии со стандартом PDF, начиная с PDF 1.5, представляет собой:

"(PDF 1.5) Обработчик безопасности определяет использование шифрования и дешифрования в документе, используя правила, указанные в записях CF, StmF и StrF".

Шифрование использует AES v.2, который ограничен PDF 1.6 и выше:

"AESV2 (PDF 1.6) Приложение должно запросить у обработчика безопасности ключ шифрования и неявно дешифровать данные с помощью" Алгоритма 1: Шифрование данных с использованием алгоритмов RC4 или AES "с использованием алгоритма AES в режиме Cipher Block Chaining (CBC) с размером блока в 16 байтов и вектором инициализации, который должен генерироваться случайным образом и помещаться в качестве первых 16 байтов в потоке или строке ".

Таким образом, даже если код дешифрования записан, способ применения этого кода может быть неизвестен из-за структуры файла PDF...

... Может быть, лучше начать с простых файлов PDF, а затем исправить все, что пока не поддерживается.

Другие вопросы по тегам