Как я могу «вручную» отредактировать аннотацию в pdf без повреждения файла? - PullRequest
1 голос
/ 17 сентября 2011

Мне нужно вставить гиперссылку в несколько тысяч существующих PDF-файлов.Я работаю с zend_pdf, который, по-видимому, не может установить невидимую границу.Единственный способ сделать границы ссылок невидимыми (нашел это где-то еще на этом сайте, здесь, если быть точным ), это найти каждый элемент ссылки в pdf и добавить аннотацию / Border., например так:

echo str_replace ('/ Annot / Subtype / Link', '/ Annot / Subtype / Link / Border [0 0 0]', $ pdf-> render ());

Поскольку мне нужно работать с файлами, которые находятся в моей файловой системе, я использую команду sed для операции поиска и замены.
Теперь, на первый взгляд, это работает, как документыправильно отображаются Acrobat 8, Viewer OSX 10.6 и Ubuntu для просмотра документов.Однако такие инструменты, как pdftk (1.41) и pdfinfo (0.12.1) сообщают, что структура повреждена.Это раздражает, так как это означает, что дальнейшие манипуляции с pdf с использованием pdftk будут невозможны, так как инструмент отказывается работать с файлом, поскольку в нем есть ошибки.Я просмотрел файлы с помощью бинарного редактора и обнаружил, что если я добавлю более двух байтов после "/ Link", файл будет поврежден.Это меня очень смущает, так как на основе спецификаций pdf (я использую 1.4) нет контрольной суммы, кроме потоков, что должно означать, что можно добавлять столько байтов, сколько он хочет, если он этого не делает внутрипоток и вставленные байты являются допустимым синтаксисом PDF.Что мне здесь не хватает?

Вот пример:
оригинал pdf
обработанный pdf

1 Ответ

1 голос
/ 27 сентября 2011

Добавление дополнительного элемента "/ Border" в файл фактически приводит к повреждению таблицы внешних ссылок pdf. Таблица внешних ссылок ссылается на все объекты по их положению, измеренному в байтах от начала файла. Вставка дополнительного элемента, конечно, сдвигает позицию (смещение) последующего содержимого на несколько байтов.
Чтобы исправить таблицу внешних ссылок после редактирования, я могу использовать pdftk из pdf labs (http://www.pdftk.com) чтобы исправить таблицу внешних ссылок:

$ pdftk поврежденный_файл.pdf выходной файл fixed_file.pdf

На самом деле мне не удалось найти комплексное решение Pdf для php, и мне пришлось использовать несколько различных видов инструментов (zend_pdf, pdftk, sed) для реализации моего рабочего процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...