Java PDFbox字体为空
我正在使用PDFbox库编写一个脚本,用于填充预先存在的PDF中的文本字段 无论出于何种原因,当我尝试使用setValue()方法更改字段中的文本时,我都会得到一个错误(复制如下) 当打印字段的确切外观信息时,它表示字体列为//Helvetica,因此它不是空的,但出于任何原因它只是不想接受 我尝试刷新默认外观,然后尝试设置值并手动将外观设置为无效。如蒙协助,将不胜感激Java PDFbox字体为空,java,string,pdf,pdfbox,Java,String,Pdf,Pdfbox,我正在使用PDFbox库编写一个脚本,用于填充预先存在的PDF中的文本字段 无论出于何种原因,当我尝试使用setValue()方法更改字段中的文本时,我都会得到一个错误(复制如下) 当打印字段的确切外观信息时,它表示字体列为//Helvetica,因此它不是空的,但出于任何原因它只是不想接受 我尝试刷新默认外观,然后尝试设置值并手动将外观设置为无效。如蒙协助,将不胜感激 import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.
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中出现异常:字体为null,请检查/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.constructAppearancess(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()) 想出来了!,我觉得很愚蠢,因为之前没有看到这一点,但从我所能看出的问题是,虽然Acroform自动声明了默认外观,但我创建的字段没有自动声明,一个简单的行将Acroforms默认外观分配给字段,一切都很好 神奇的线条是
field.setDefaultAppearance(acroForm.getDefaultAppearance()) “//Helvetica”不是/DA元素的正确内容。正确的看起来更像“/Helv 12 Tf 0 g”。请共享您的PDF。“//Helvetica”不是/DA元素的正确内容。正确的看起来更像“/Helv 12 Tf 0 g”。请分享你的PDF。