PDFBox 字段值在展平后无法显示
Posted
技术标签:
【中文标题】PDFBox 字段值在展平后无法显示【英文标题】:PDFBox field value cannot display after flatten 【发布时间】:2021-06-30 07:29:14 【问题描述】:我有一个由 LiberOffice Draw 4.1.0.4 创建的 PDF 表单。
表单包含文本字段、复选框和单选按钮
在我为字段设置值并使用PDFBox(2.0.21)展平表单后,字段值无法显示
我认为这可能是该字段注释的外观问题,但我不知道如何使其正确
Test 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);
【问题讨论】:
请用 2.0.24 重试 与头部版本按预期工作;更新确实就足够了。 用 2.0.24 重试并成功。谢谢 【参考方案1】:PDAcroForm.flaten 在使用 pdfbox 2.0.24 后对我有用
<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>
【讨论】:
我怀疑你需要 pdfbox-examples。以上是关于PDFBox 字段值在展平后无法显示的主要内容,如果未能解决你的问题,请参考以下文章
PDFBOX Flatten Acro-form 导致文本从原始位置移位
使用 PDFBOX 生成的 PDF 中未正确显示已保存的文本字段值