iText7 深层 formField 层次结构未正确处理

iText7 deep formField hierarchies aren't handled correctly

iText 7.0.0

我不确定这是 LiveCycle/XFA 的特性还是我们表单团队采用的约定,但很多表单字段限定名称最终看起来像:

form[0].someForm_page1[0].table1[0].row1[0].cell1[0].Text[0]
form[0].someForm_page1[0].table1[0].row1[0].cell1[0].Text[1]

合并时(PdfDocument.copyTo...包括 PdfPageFormCopier)仅复制页面 /Widgets 的直接父级(尽管我在上面提到了 XFA,这种行为也会发生在非混合表单中)。

PdfDocument src = createForRead("someForm.pdf");
PdfDocument merged = createForWrite("merged.pdf");
src.copyPagesTo(1, src.getNumberOfPages(), merged, new PdfPageFormCopier());
merged.close();
src.close();

结果字段看起来像

 cell1[0].Text[0]
 cell1[0].Text[1]

或更糟,对于这样的情况

page1.section1.Text1
page2.section1.Text1

不构建完整的层次结构可能会导致唯一字段变得不唯一

section1.Text1
section1.Text1

在SmartMode中,情况似乎更糟(这个似乎在7.0.1-20162707中修复了!)

page1.Text1
page2.Text1

合并到

page1.Text1
page1.Text1

这已在 iText 7.0.1 中修复