PDFBOX 从我的 html 字段中填写文档

Posted

技术标签:

【中文标题】PDFBOX 从我的 html 字段中填写文档【英文标题】:PDFBOX filling document from my html fields 【发布时间】:2017-11-25 13:26:03 【问题描述】:

我遇到了 PDFBOX 的问题。

所以我创建了一个简单的代码:

public class DelegationsPdf
public Delegations getPDF(Delegations delegations) throws IOException

    PDDocument delegation = new PDDocument();
    PDDocumentCatalog catalog = delegation.getDocumentCatalog();
    PDAcroForm pdAcroForm = catalog.getAcroForm();

    PDPage page = new PDPage();
    delegation.addPage(page);
    page = delegation.getPage(0);

    PDPageContentStream content = new PDPageContentStream(delegation, page);
    content.beginText();
        content.setFont(PDType1Font.TIMES_ROMAN, 20);
        content.setLeading(14.5f);
        content.newLineAtOffset(275, 750); 
        content.showText("Delegations");
    content.endText();

    content.beginText();
        content.newLineAtOffset(50 ,650);
        content.setFont(PDType1Font.TIMES_ROMAN, 12);
        content.showText("Worker:");
    content.endText();

    // FILL THE FIELD
    content.beginText();
        PDField name = pdAcroForm.getField(delegations.getName());
        content.newLineAtOffset(100 ,650);
        content.setFont(PDType1Font.TIMES_ROMAN, 12);
          pdAcroForm.getFields().add(name);
    content.endText();

    content.close();
    delegation.save("C:/delegation.pdf");
    delegation.close();
    return delegations;

所以请告诉我为什么注释字段“/填充字段”下的代码不能正常工作?它从我的代表团课程中获取有关姓名的信息。你能帮助我吗?当我运行它并单击按钮时,我遇到了 NULL 错误。

【问题讨论】:

当然是空的。 pdAcroForm.getField(delegations.getName()); 不会返回任何内容,因为您的文档没有任何字段。顺便说一句,您的代码令人困惑。 PDDocument 对象应命名为“document”或“delegationDocument”,而不是“delegation”。 PDField 应称为“字段”而不是“名称”。 我建议你看看svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/…,这里展示了如何创建一个表单。 pdfbox.apache.org/2.0/faq.html#fontencoding 。当前版本是 2.0.8。 @KonradP 请删除您的问题或自己回答,以避免孤儿。 您可以使用setLeading() 设置/更改该空间。 【参考方案1】:

所以,在您的帮助下,问题终于解决了。

首先,我必须知道,当我“下载”我想从 HTML 表单中填写的值时,我需要在 pdfbox 中创建一个字段(表单)然后填写。

其次,我需要对特殊字符(UTF 8)使用 PDType0Font.load()。

谢谢

【讨论】:

以上是关于PDFBOX 从我的 html 字段中填写文档的主要内容,如果未能解决你的问题,请参考以下文章

pdfbox 操作 pdf 文档 - android

如果在 PDF 表单中多次出现,Java PDFBox 不会保持字段的字体外观

使用 PDFBox 为扁平化 PDF 表单嵌入字体

如何在扫描的文档图像上找到空白字段

基于PDFBox的PDF文字坐标抽取API文档

使用 PDFbox 确定文档中单词的坐标