Извлечение и повторная оценка 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, а затем исправить все, что пока не поддерживается.