PDFbox字体为空

PDFbox font is null

我正在使用 PDFbox 库编写一个脚本来填充预先存在的 PDF 中的文本字段。

无论出于何种原因,当我尝试使用 setValue() 方法更改字段中的文本时,我都会收到错误消息(复制如下)

当打印字段的确切外观信息时,它说字体被列为 //Helvetica,因此它不是空的,但无论出于何种原因它只是不想接受

我试过刷新默认外观,然后尝试设置值和手动设置外观都没有效果。如有任何帮助,我们将不胜感激

import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDCheckBox;
import org.apache.pdfbox.pdmodel.interactive.form.PDField;
import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;

import java.io.File;
import java.io.IOException; 



public class Main {

    

    public static void main(String[] args) throws IOException {
        File file = new File(pathToFile);
        PDDocument document = PDDocument.load(file);
        PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm();
        PDTextField field = (PDTextField) acroForm.getField( "Name" );
        field.setValue("test");
             
    

        
        
        document.save(PathToSaveFile);
         
        
        

    }

}

确切的错误信息

线程“main”中出现异常java.lang.IllegalArgumentException:字体为空,请检查/DA 条目是否不完整或不正确 在 pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.insertGeneratedAppearance(AppearanceGeneratorHelper.java:438) 在 pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceContent(AppearanceGeneratorHelper.java:392) 在 pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceValue(AppearanceGeneratorHelper.java:225) 在 pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.PDTextField.constructAppearances(PDTextField.java:264) 在 pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField.applyChange(PDTerminalField.java:228) 在 pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.PDTextField.setValue(PDTextField.java:219) 在 freshpdfedit.Main.main(Main.java:35)

编辑:想通了!,因为没有早点看到这一点而感到非常愚蠢,但问题是虽然 Acroform 具有自动声明的默认外观,但我创建的字段没有自动声明,一个简单的行将 Acroforms 默认外观分配给字段,一切正常。

field.setDefaultAppearance(acroForm.getDefaultAppearance());

想通了!,为没有早点看到这一点感到非常愚蠢,但据我所知,问题是虽然 Acroform 具有自动声明的默认外观,但我创建的字段没有自动声明,将 Acroforms 默认外观分配给字段的简单行,一切正常。

魔法线是
field.setDefaultAppearance(acroForm.getDefaultAppearance());