PDF格式的表单XObject页面模板

时间:2014-11-16 05:57:24

标签: pdf pdf-generation

我正在编写PDF生成库,并希望添加使用其他PDF作为模板的功能。该规范在页面上注明TemplateInstantiated属性,模板对象的别名应该是所有需要的。

以下是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

2 个答案:

答案 0 :(得分:1)

我担心您的PDF文档完全被彻底破坏,并且您误解了许多关键概念。您不能简单地将完整的PDF文件以您完成的方式合并到另一个PDF文件中,并期望它能够正常工作。

您所指的模板系统旨在包含"隐藏"页面 - 未在PDF文件的页面树中引用 - 在交互式表单文档(或一般的交互式文档)的上下文中。这听起来并不像你打算做的那样。这些页面需要是有效的PDF页面。换句话说,您不仅可以逐字包含原始PDF文档,还可以期待PDF阅读器解决问题;你需要插入一个语法正确的PDF页面对象。

您要做的是获取文档的内容并将其作为文档的背景应用。这通常是使用XObjects完成的。伪代码可以是:

  • 打开原始PDF文档
  • 打开"模板"文件
  • 阅读模板文档并将模板页面中的所有元素复制到原始PDF文档中新创建的XObject中。
  • 修改原始PDF文档中页面的页面内容,以在现有页面的页面描述的开头绘制新的XObject。

重要的是要注意,您不应该只是将模板文档插入到新创建的XObject的流中。您必须创建一个有效的XObject,其中包含一个正确形成的资源字典,该字典引用XObject所需的所有资源,并包含模板文档中的内容流。

答案 1 :(得分:0)

正如评论中已经指出的那样,OP提供的PDF结构缺陷,交叉参考表位置和条目错误。此外,从一个PDF修订版到下一个更新版的转换看起来有问题。因此,基本上,OP必须提供一个至少在语法上正确的PDF样本。

尽管如此,OP表示他是

  

编写PDF生成库,并希望添加使用其他PDF作为模板的功能。该规范在页面上注明了TemplateInstantiatedproperty,模板对象的别名应该是所有需要的。

命名页面机制不适用于类似的东西。它的主要当前用途(如果它完全使用)是在Acroform操作产生页面模板的上下文中。

对于使用来自其他PDF的页面,只要将它们作为单独的页面使用,就可以简单地从源PDF中复制它们(和引用的其他对象);如果要将多个模板放到单个目标页面上,可以将复制的源包装到表单xobjects中并将它们包含在目标页面中。