我使用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);
}
}准确错误信息
线程“主”java.lang.IllegalArgumentException中的异常:字体为空,检查pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.insertGeneratedAppearance(AppearanceGeneratorHelper.java:438) at pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceContent(AppearanceGeneratorHelper.java:392) at pdfbox.app@2.0.22 /DA条目是否不完整或不正确。app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.PDTextField.constructAppearances(PDTextField.java:264) at pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField.applyChange(PDTerminalField.java:228) at pdfbox.app@2.0.22 (1)/org.apache.pdfbox.pdmodel.interactive.form.PDTextField.setValue(PDTextField.java:219) at freshpdfedit.Main.main(Main.java:35)
编辑:想清楚了!,我觉得很愚蠢,因为之前没有看到这一点,但问题是,虽然Acroform自动声明了默认外观,但我正在创建的字段没有自动声明它,一条简单的行将Acroform默认外观分配到字段上,一切正常工作。
field.setDefaultAppearance(acroForm.getDefaultAppearance());
发布于 2021-02-22 05:37:58
想清楚了!,如果之前没有看到这一点,我会觉得非常愚蠢,但从我所知道的问题来看,虽然Acroform的默认外观是自动声明的,但是我正在创建的字段没有自动声明它,一个简单的行将Acroform的默认外观分配到字段上,一切都很好。
魔法线是
field.setDefaultAppearance(acroForm.getDefaultAppearance());
https://stackoverflow.com/questions/66309981
复制相似问题