当前位置: 首页 > 知识库问答 >
问题:

展平后无法显示PDFBox字段值

杜元明
2023-03-14

我有一个由LiberOffice Draw 4.1.0.4创建的PDF表格。

表单包含文本字段、复选框和单选按钮

在我为字段设置值并使用PDFBox(2.0.21)展平表单后,无法显示字段值

我认为这可能是该字段注释的外观问题,但我不知道如何使其正确

测试PDF

import org.apache.commons.lang3.StringUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDField;
import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;

import java.io.File;

public class PdfGenerationTest {
    public static void main( String[] args ) throws Exception{
        testFillValue();
    }
    
    public static void testFillValue() throws Exception{
        PDDocument pdDocument = PDDocument.load(new File("C:\\temp\\test.pdf"));
        
        PDAcroForm acroForm = pdDocument.getDocumentCatalog().getAcroForm();
        
        String defaultAppearance = "/Helv 12 Tf 0 0 1 rg";
        
        for(PDField field : acroForm.getFields()) {
            if (field instanceof PDTextField) {
                PDTextField textField = (PDTextField) field;
                textField.setActions(null);             
                textField.setDefaultAppearance(defaultAppearance);
            }
        }
        
        setFormValue(acroForm, "TextBox", "testvalue");
        setFormValue(acroForm, "radioBtn", "Yes");
        setFormValue(acroForm, "chkBox", "Yes");
        acroForm.refreshAppearances();
        acroForm.flatten();
        
        pdDocument.save("C:\\temp\\test_filled.pdf");
        pdDocument.close();
    }
    
    private static void setFormValue(PDAcroForm acroForm, String key, String value) throws Exception {
        PDField f = acroForm.getField(key);        
        if (f != null) {
            if (value != null && StringUtils.isNotEmpty(value.trim())) {
                f.setValue(value);
            }
        }
    }
}

共有1个答案

丁正阳
2023-03-14

PDAcroForm。在使用pdfbox 2.0.24后,flaten为我工作

<dependencies>
<dependency>
<groupId>org.apache.pdfbox</groupId>
   <artifactId>pdfbox</artifactId>
   <version>2.0.24</version>
</dependency>
<dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>fontbox</artifactId>
        <version>2.0.24</version>
</dependency>
<dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox-examples</artifactId>
        <version>2.0.24</version>
</dependency>
</dependencies>
 类似资料:
  • 问题内容: 问题1, 我创建了一个文本字段,如上面的代码所示,并尝试使用textbox.setValue(“ Test Value”);设置值。方法,但显示如下错误: 第2期 为了解决问题#1,如果我使用cosDictionary属性(即cosDict1.setItem(COSName.V,new COSString(“ Test Value1”)))设置textBox的值; 然后在Adobe R

  • 生成PDF框 正如您所看到的,左侧的签名面板是无效的,但左侧的签名字段是存在的并且可以工作。 我用PDFTRON生成相同的PDF。这就是结果: 生成的PDF Tron 在这种情况下,左侧的签名面板正确显示签名字段的存在。 我想获得这第二个案例(正确),但我不明白为什么PDF框可以这样做。 多谢

  • 第一次在JAVA项目上使用FreeMarker,在配置汉字时使用堆栈。 看到了一些对FreeMarker.Properties进行更改的示例请求,但我没有这个文件。我只是导入。jar文件并使用它。 请告诉我该怎么做才能让它显示汉字。

  • 如何使用PDFBox“展平”PDF表单(删除表单字段,但保留字段文本)? 这里回答了同样的问题: 一个快速的方法是从acrofrom中删除字段。 为此,您只需要获取文档曲库,然后是acroform,然后从该acroform中删除所有字段。 图形表示与注释链接并保留在文档中。 所以我写了这段代码:

  • 但是,我得到了这个“重定向循环”问题: 重定向到URL'https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples':重定向到URL'https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/

  • 排除不显示字段 Model.findAll({ attributes: { exclude: ['baz'] } });