为什么不显示使用 PDFBox(2.0.11) 设置的表单字段?

我正在使用 PDFBox 2.0.11 打开 PDF 表单并提取值。这按预期工作。当我尝试设置一个值时,它似乎有效。当我打开 PDF 时,不显示该值。如果我在该字段中单击,则该值将显示为设置,但当我单击该字段时再次消失。


这似乎是一个常见问题,但我见过的修复程序似乎都不起作用。


if(file.exists())

    {

        PDDocument doc = PDDocument.load(file);

        doc.setAllSecurityToBeRemoved(true);

        PDDocumentCatalog catalog = doc.getDocumentCatalog();

        PDAcroForm form = catalog.getAcroForm();


        // Add Font

        PDResources resources = new PDResources();

        resources.put(COSName.getPDFName("Helv"), PDType1Font.HELVETICA);

        form.setDefaultResources(resources);

        // End Add Font


        form.setNeedAppearances(false);

        List<PDField> fields = form.getFields();


        for (Object field : fields) 

        {

            if (field instanceof PDTextField) {

                PDTextField pdTextbox = (PDTextField) field;

                System.out.println("PDTextBox " + pdTextbox.getFullyQualifiedName() + " " + pdTextbox.getValue());


                if(pdTextbox.getFullyQualifiedName().equalsIgnoreCase("a3_5"))

                {

                    try {

                        pdTextbox.getWidgets().get(0).setHidden(false);

                        pdTextbox.setValue("5500");

                    }

                    catch(Exception e){

                        e.printStackTrace();

                    }

                }

            }

            else

            {

                System.out.print(field);

                System.out.print(" = ");

                System.out.print(field.getClass());

                System.out.println();

            }

        }


        doc.save("..._MINE_UPDATE.pdf");

        doc.close();

    }  


ibeautiful
浏览 234回答 2
2回答

长风秋雁

出于某种原因,预览会剔除同样导致您无法在 PDF 中正确设置值的功能。上面的代码可以正常工作,尽管我确实Add Font对以下部分进行了更改。// Add FontPDResources resources = form.getDefaultResources();if(resources == null){&nbsp; &nbsp; resources = new PDResources();}resources.put(COSName.getPDFName("Helvetica"), PDType1Font.HELVETICA);if(form.getDefaultResources() == null){&nbsp; &nbsp; form.setDefaultResources(resources);}// End Add Font

慕尼黑的夜晚无繁华

如果不明显:不要使用 Mac 的预览创建/编辑/保存模板 pdf 以与 PDFBox 一起使用。我遇到了同样的问题,不得不在 Acrobat Pro 中重新创建 PDF。有了这个 PDF,上面的代码工作得很好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java