我正在使用Adobe LiveCycle Designer和XML文件来为项目创建一些PDF表单。我创建了一个XSD,其中包含一个无限的选择序列,例如以下内容:

<xs:sequence maxOccurs="unbounded">
  <xs:choice>
    <xs:element name="Item1" type="xs:string" />
    <xs:element name="Item2" type="xs:string"/>
  </xs:choice>
</xs:sequence>

为了在Adobe Livecycle设计师中表示,我有以下内容:

MyForm (Subform)
  ItemsSubForm (Subform, repeated for many items)
    Item1Wrapper (Subform)
      Item1 (TextField)
    Item2Wrapper (Subform)
      Item2 (TextField)
  AddItemsButtonsSubForm
    AddItem1Button (Button)
    AddItem2Button (Button)

当有人按AddItem1button时,我会使用以下内容创建一个新的tooksubform实例:

this.parent.parent._ItemsSubForm.addInstance();
xfa.resolveNode("this.parent.parent.ItemsSubForm[" +(this.parent.parent.ItemsSubForm.instanceManager.count - 1) + "]").Item2Wrapper.presence = "hidden";

以及Additem2Button的相反事项。

问题是,除了手动插入项目外,我还希望能够使用XML文件,因此我创建了上面的XSD。我还使用绑定将XSD中的Item1和Item2元素与Item1Wrapper和Item2Wrapper相关联。问题是,一旦我在XML中拥有一个item1元素,就可以创建item1wrapper和item2wrapper(与item2相同)。有什么方法可以控制加载以隐藏各自的包装器?

我想通知您,不幸的是,我无法更改PDFFORM或XSD。

有帮助吗?

解决方案

如果我正确理解您,则必须仅限于更改XML文件。

我认为您无法在不更改PDF表单的情况下解决此问题,因为您将其设置为始终插入两个项目的孩子。

您应该使用选择子形式或与每个项目关联的重复设置?包装器(重复每个数据项,min count = 0)。

其他提示

如果选择确实很简单,则可以使用XSD:枚举。否则,您的复杂类型应该看起来像这样:

<xs:complexType name="ItemList">
    <xs:sequence>
       <xs:element name="item" type="xs:string" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="myItems" type="ItemList"/>

在“列表项目”动态属性对话框中,您的绑定应为

Items:   $record.myItems.item[*]
Item Text:   $
Item Value:  $

假设你把 myItems 元素在您的架构中的根元素下方。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top