首页 > 解决方案 > 如何用 iText 填写 XFA 表单:不是修改数据集,而是修改 XDP 中的其他数据组

问题描述

我有一个 XFA 表单,我想用 Python 或 C# 或两者自动填写。

如果表单数据像通常的 XFA pdf 那样位于数据集中,那将很容易,但事实并非如此。以下是数据集中一些数据的示例:

<?xml version="1.0" encoding="UTF-8"?>
<topmostSubform
><Effacer
/><Rangée3 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup"
/><table2
><Rangée1
><colG
><positioner xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup"
/></colG
><colD xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup"
/></Rangée1
></table2
><positioner1 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup"
/><table2
><Rangée1
><colG
><positioner xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup"
/></colG 

它指向位于文件 XDP 中位置 15 的另一个数据组。使用 python,我可以轻松访问 XDP,这是它的配置:

[xdp:xdp 115 0 R config 2 0 R template 3 0 R datasets 116 0 R localeSet 5 0 R xmpmeta 6 0 R xfdf 7 0 R form 117 0 R </xdp:xdp> 118 0 R ]

我在“表单”流中找到了所有表单数据,这是其中的一部分:

<form xmlns="http://www.xfa.org/schema/xfa-form/2.8/" checksum="8cn7XfZQ5SK/27lJmAiqCnPmd4M=">
  <subform name="topmostSubform">
    <field name="pMultilineModified">
      <value>
        <text>N</text>
      </value>
      <assist>
        <toolTip/>
      </assist>
    </field>
    <instanceManager name="_page1"/>
    <subform name="page1">
      <instanceManager name="_sf0"/>
      <subform name="sf0">
        <instanceManager name="_container1"/>
        <subform name="container1">
          <instanceManager name="_positioner"/>
          <subform name="positioner">
            <instanceManager name="_sf_numeroEvenement"/>
            <subform name="sf_numeroEvenement">
              <instanceManager name="_container"/>
              <subform name="container">
                <instanceManager name="_Figure"/>
                <subform name="Figure">
                  <field name="NumeroEvenement">
                    <assist>
                      <toolTip/>
                    </assist>
                    <value override="1">
                      <text>12234445522</text>
                    </value>
                  </field>
                </subform>
              </subform>
            </subform>
            <field name="txt0_UnitePlaignante">
              <assist>
                <toolTip/>
              </assist>
              <value override="1">
                <text>200</text>
              </value>
            </field>
            <field name="Effacer">
              <assist>
                <toolTip/>
              </assist>
            </field>
          </subform>
        </subform>

所以真正的问题是:

我如何使用 iText7 在 XDP PdfObject 的第 15 位获取此“表单”流,对其进行修改以将其放回 XDP 并将 XDP 放回 pdf 中?要复制我正在尝试做的事情,可以尝试从 XDP 中获取除数据集以外的任何其他元素,修改与否,然后将其放回 pdf 中。我没能。

我试过了; Pypdf2 PDFNet(python 和 C#)、iText7..

我很绝望,我已经尝试了几个星期没有解决方案。我显然不能使用 iText FillXfaForm 方法,因为它修改了数据集,我想修改表单。

标签: pythonitext7fillxfaxdp-pdf

解决方案


推荐阅读