如何从pdf文档中的片段引用中读取?

时间:2014-11-24 21:29:25

标签: forms pdf livecycle

我正在使用adobe LiveCycle ES4,我正在尝试创建一个自定义LiveCycle组件(在java中),它计算对指定表单片段的引用。但是我在pdf文件中找到有关表单片段的文档时遇到了一些困难。所以我的问题是如何从pdf文档中读取表单片段引用?

此外,我们将非常感谢任何可以帮助我完成此任务的文档,API或库。

- 表格碎片 - 表单片段是表单对象(字段,按钮,形状,表等)的集合,以及相关的样式/格式,在表单片段库(通常是生态周期服务器上的目录)中保存为单独的.xsd文件。持有.xsd文件)。在LiveCycle Designer中工作时,可以将表单片段的引用插入到表单中。这对于创建许多类似的表单(例如带有联系人信息字段的表单片段)特别有用。编辑表单片段时,更改将反映在包含对该片段的引用的所有表单中(当打开pdf并可以访问表单片段库时。

2 个答案:

答案 0 :(得分:1)

PDF规范目前是官方ISO标准 - ISO 32000.您应该能够从ISO组织或您所在国家/地区的标准组织获取该文档。

但是,在成为ISO标准之前,PDF是由Adobe开发和维护的,他们仍然在其网站上提供了规范:http://www.adobe.com/devnet/pdf/pdf_reference.html

此规范与ISO 32000规范文档之间存在差异,但它们主要来自编辑方式,因此出于您的目的,我会查看Adobe文档。

使用评论中的附加信息,您的测试文件和低级PDF文档浏览器(本例中为pdfToolbox - 注意,我是该产品的附属机构),我发现了以下信息:

在"目录"对象为您的测试PDF,您将找到一个名为" AcroForm"指向包含表单信息的字典。

在那" AcroForm"您将找到一个名为" XFA"的字典。其中包含几乎所有有关LifeCycle设计器生成的XFA表单的信息。

那" XFA"关键点指向一个似乎由信息对组成的数组。元素0是一个名为" preamble"的字符串,元素1似乎是属于该字符串的数据。所以每对元素都是一些信息。

该数组中的信息包括" preamble"," config"," template"," localeset"," xmpmeta"和" postamble"。如果你看一下"模板的元素" (如果您计算从1开始计算数组中的第6个元素),您将找到您要查找的数据。数据存储为FlateDecoded流,您必须解压缩 - 然后它只是应该相当容易解析的XML数据。在这三行中你应该特别感兴趣:

<subform x="6.35mm" y="6.35mm" name="TestFragment1"
<subform x="3.175mm" y="34.925mm" name="TestFragment2"
<subform x="0.125in" y="2.75in" name="TestFragment2"

我假设mkl指向的XFA规范包含有关这些内容的更多信息,但它似乎只是在寻找&#34; subform&#34; XML中的元素可以很容易地为您提供对表单片段的引用。

答案 1 :(得分:1)

在您提供的示例PDF中的XFA xml数据中,有如下处理指令:

<?templateDesigner expand 1?><?designerFragmentSource CjxzdWJmb3JtIHVzZWhyZWY9Ii4uXC4uXC4uXEFkb2JlXEFkb2JlIExpdmVDeWNsZSBFUzRcZm9y
bV9mcmFnbWVudHNcVGVzdEZyYWdtZW50MS54ZHAjc29tKCR0ZW1wbGF0ZS5mb3JtMS5UZXN0RnJh
Z21lbnQxKSIgeD0iNi4zNW1tIiB5PSI2LjM1bW0iIHhtbG5zPSJodHRwOi8vd3d3LnhmYS5vcmcv
c2NoZW1hL3hmYS10ZW1wbGF0ZS8zLjMvIgo+PD90ZW1wbGF0ZURlc2lnbmVyIGV4cGFuZCAxPz48
L3N1YmZvcm0KPg==?>

解码base64编码的参数得到:

<subform usehref="..\..\..\Adobe\Adobe LiveCycle ES4\form_fragments\TestFragment1.xdp#som($template.form1.TestFragment1)" x="6.35mm" y="6.35mm" xmlns="http://www.xfa.org/schema/xfa-template/3.3/"
><?templateDesigner expand 1?></subform
>

所以它看起来像你的

  

自定义LiveCycle组件(在java中),它计算对指定表单片段的引用

应该解析XFA XML,查找这些designerFragmentSource处理指令并进行分析。

请注意,这些处理说明很可能是专有的Adobe内容(我至少没有在当前的XFA规范中找到它们)。因此,一旦第三方工具触及XFA XML,PI就可能不再准确。实际上,您甚至无法确定在不同的Adobe软件版本中会发生什么。