2017-11-25 311 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)。

謝謝