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());
我正在使用 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());