2014-11-16 2 views
0

Я пишу библиотеку PDF-файлов и хотел бы добавить возможность использовать другие PDF-файлы в качестве шаблонов. Спецификация отмечает, что свойство TemplateInstantiated на страницах с псевдонимом объекта шаблона должно быть всем, что необходимо.Шаблоны страниц с формой XObject в PDF

Вот суть содержания PDF:

https://gist.github.com/tyre/89c12f8203181f078001

Сам шаблон хранится in object 16 и страница в object 19.

qpdf --check сообщает PDF Недействительные:

WARNING: tmp/alpaca.pdf: file is damaged 
WARNING: tmp/alpaca.pdf (file position 32089): xref not found 
WARNING: tmp/alpaca.pdf: Attempting to reconstruct cross-reference table 
checking tmp/alpaca.pdf 
PDF Version: 1.7 
File is not encrypted 
File is not linearized 
+0

Я скачал ваш pdf-текст. он указывает xref на 32089 (как уже указывает ваш вывод qpdf), но ваша таблица перекрестных ссылок вообще отсутствует. он выглядит как 48583 (если только он не рассмотрел PDF как текст). Записи таблицы выглядят неправильно. – mkl

+0

BTW, переход 'startxref 116 %% EOF endstream endobj 17 0 obj' выглядит как минимум странным. – mkl

ответ

0

Как уже отмечался в комментариях PDF, представленный О.П. структурно дефекта, перекрестная ссылка позиции таблицы и данные неверны. Кроме того, переход от одной версии PDF к следующему обновлению выглядит сомнительным. По существу, поэтому OP должен будет предоставить образец PDF, который, по крайней мере, синтаксически правильный.

Это было сказано, хотя, ОП указал, что он был

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

Механизм Named Pages не предназначен для чего-то подобного. Его основное текущее использование (если оно используется вообще) находится в контексте появления шаблонов страниц с помощью действий Acroform.

Для использования страниц из других PDF-файлов можно просто скопировать их (и ссылки на другие объекты) из исходного PDF-документа, если они будут использоваться как отдельные страницы, как есть; и если несколько шаблонов должны быть помещены на одну целевую страницу, можно скопировать скопированные источники в формы xobject и включить их на целевую страницу.

1

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

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

Что вы хотите сделать, это взять содержимое документа и применить его в качестве фона для документа. Это чаще всего выполняется с помощью XObjects. Псевдо-код, это может быть:

  • Открыть оригинальный PDF документ
  • Открыть «шаблон» документ
  • Прочитайте документ шаблона и скопировать все элементы шаблона страницы в недавно созданный XObject в оригинальный PDF-документ.
  • Изменить содержимое страницы страниц в оригинальном документе PDF, чтобы нарисовать новый объект XObject в начале описания страницы существующих страниц.

Важно отметить, что вы не должны просто вставлять документ шаблона в поток для вновь созданного объекта XObject. Вам нужно будет создать допустимый объект XObject, который содержит правильно сформированный словарь ресурсов, ссылающийся на все ресурсы, необходимые вашему XObject, и содержащий поток контента из вашего документа шаблона.

+0

Удивительный! Это имеет гораздо больший смысл. Спецификация довольно сбивает с толку вокруг этого. Вернуться к истокам! – Chris

+0

Вы можете ознакомиться с существующим API, позволяющим использовать существующий PDF в качестве шаблона (iText, go.applidok.com, ...). – cchantep