2017-11-25 312 views
0

我遇到了PDFBOX的问题。PDFBOX从我的html字段填充文档

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

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的错误。

+2

当然它是空的。 'pdAcroForm.getField(delegations.getName());'不会返回任何东西,因为你的文档没有任何字段。顺便说一句你的代码很混乱。一个PDDocument对象应该被命名为“document”或“delegationDocument”,而不是“delegation”。 PDField应该被称为“字段”而不是“名称”。 –

+1

我建议你看一下https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/,它展示了如何创建一个表单。 –

+0

哦,是的,我发现我必须添加字段。名字被我改变了,因为我想知道什么是错的。 所以..首先,当我创建一个模板时,我需要创建表单并将其添加到那里(从apache svn上的示例 - FillFormField?)。但是我怎样才能添加每个领域的位置? – Kondziowsky

回答

1

所以,最后,你的帮助解决了问题。首先,我必须知道,当我“下载”我想要从HTML表单填充的值时,我需要在pdfbox中创建一个字段(表单)并填充它。

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

谢谢