1

PDFBox setValue() 不是为每个 PDTextField 设置数据。它节省了几个领域。它不适用于在 getFullyQualifiedName() 中具有相似外观的字段。

注意: field.getFullyQualifiedName() { customdutiesa, customdutiesb, customdutiesc } 它适用于 customdutiesa,但不适用于 customdutiesb 和 customdutiesc 等...

@Test
public void testb3Generator() throws IOException {
    File f = new File(inputFile);

    outputFile = String.format("%s_b3-3.pdf", "123");

    try (PDDocument document = PDDocument.load(f)) {

        PDDocumentCatalog catalog = document.getDocumentCatalog();
        PDAcroForm acroForm = catalog.getAcroForm();
        int i = 0;
        for (PDField field : acroForm.getFields()) {
            i=i+1;
            if (field instanceof PDTextField) {
                PDTextField textField = (PDTextField) field;
                textField.setValue(Integer.toString(i));
            }
        }

        document.getDocumentCatalog().getAcroForm().flatten();

        document.save(new File(outputFile));
        document.close();
    }
    catch (Exception e) {

        e.printStackTrace();
    }
}

输入 pdf 链接: https ://s3-us-west-2.amazonaws.com/kx-filing-docs/b3-3.pdf 输出 pdf 链接:https://kx-filing-docs.s3-us-west -2.amazonaws.com/123_b3-3.pdf

4

1 回答 1

3

问题是在某些情况下 PDFBox 不会为它设置值的字段构造外观,因此,在展平期间完全忘记了字段内容:

// in case all tests fail the field will be formatted by acrobat
// when it is opened. See FreedomExpressions.pdf for an example of this.  
if (actions == null || actions.getF() == null ||
    widget.getCOSObject().getDictionaryObject(COSName.AP) != null)
{
    ... generate appearance ...
}

( org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceValue(String))

即,如果存在与字段关联的值格式设置的 JavaScript 操作并且尚不存在外观流,则 PDFBox 假定它不需要创建外观(并且可能无论如何都会做错,因为它不使用该格式设置操作)。

如果用例稍后将表单展平,那么 PDFBox 的假设显然是错误的。

要强制 PDFBox 也为这些字段生成外观,只需在设置字段值之前删除操作:

if (field instanceof PDTextField) {
    PDTextField textField = (PDTextField) field;
    textField.setActions(null);
    textField.setValue(Integer.toString(i));
}

(来自FillAndFlatten测试testLikeAbubakarRemoveAction

于 2020-04-01T11:58:41.667 回答