首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFbox字体为空

PDFbox字体为空
EN

Stack Overflow用户
提问于 2021-02-22 04:19:30
回答 1查看 648关注 0票数 0

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

无论出于什么原因,当我尝试使用setValue()方法修改字段中的文本时,我都会得到一个错误(复制到下面)

当打印字段的确切外观信息时,它说字体被列为//Helvetica,所以它不是空的,但是不管出于什么原因,它都不想接受。

在尝试设置值和手动设置外观之前,我尝试过刷新默认外观,但两者都没有效果。如能提供任何协助,将不胜感激。

代码语言:javascript
复制
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());

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-22 05:37:58

想清楚了!,如果之前没有看到这一点,我会觉得非常愚蠢,但从我所知道的问题来看,虽然Acroform的默认外观是自动声明的,但是我正在创建的字段没有自动声明它,一个简单的行将Acroform的默认外观分配到字段上,一切都很好。

魔法线是

field.setDefaultAppearance(acroForm.getDefaultAppearance());

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66309981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档