2012-09-04 54 views
2

我有一個PDF模板(使用Adobe Livecycle designer設計),它有一個子窗體和一個文本框。這兩個對象的屬性設置爲float。這些對象的高度設置爲Autofit。所有這些對象的父母高度都被設置爲AutoFit如何根據文本內容顯示浮動文本字段?

我的意圖是根據我們輸入文本字段的文本內容來增加文本字段的高度。

當我從Adobe設計人員預覽模板時,生成的預覽PDF將文本字段顯示爲浮動(基於我輸入的測試數據)。

對於我們的應用目的,我們使用iText。

基本上,我們加載這些預定義的模板,並使用iText API將數據填入這些字段。

的iText的當前版本中,我們使用的是iText的5.1.3

... 

Document document = new Document(); 
document.open(); 
PdfReader reader = new PdfReader(<inputTemplate>); 
ByteArrayOutputStream aStream2 = new ByteArrayOutputStream(); 
PdfStamper stamper2 = new PdfStamper(reader, aStream2); 
AcroFields form = stamper2.getAcroFields(); 
form.setField("<fieldname>", "<fieldvalue>"); 

... 

等。

這樣生成的PDF只顯示符合文本框大小的文本,基本上忽略溢出。

希望我已經給出了我遇到的問題的足夠的描述。我想動態地嵌入內容並使PDF的其餘部分可浮動。我想知道如何使用iText達到這個目標?

回答

1

你在混合不同的東西。

PDF中有兩種類型的表單技術: - AcroForm技術:使用PDF語法描述表單,例如使用鍵/值對描述字段的PDF字典,以及用於存儲座標的PDF數組一個領域,等等。如果您使用AcroForm技術,則無法滿足您的要求。你正在使用錯誤的技術。通常,這些表單使用Adobe Acrobat,LibreOffice,... - XML Forms Architecture(XFA):使用XML描述表單。 PDF充當XML的容器。通常,這些表單是使用Adobe LiveCycle Designer創建的。

有時,表單使用這兩種技術(混合形式),在這種情況下,表單使用PDF語法以及XML語法進行定義。

實現您想要的唯一方法是使用純粹的動態XFA表單。在這種情況下,你不能使用setField()方法。相反,您必須像在此示例中那樣使用fillXfaForm():http://itextpdf.com/examples/iia.php?id=165 或者您必須使用XFA Worker,您可以在其中找到演示:http://demo.itextsupport.com/xfademo/

+0

非常感謝您的回覆。我的要求是一個30頁的文檔,其中大部分是靜態文本,其中包含數據元素(如checkfields,$ amount字段等)。因此我們一直使用AcroFields.setField(...)方法。在某些地方,我需要嵌入(內聯)動態數據(如NOTES)(如果可用)。傳統上,我們將這些筆記作爲展品附加到文檔的末尾,但是我正在探索是否可以嵌入內嵌,仍然保留靜態文本的其餘部分。感謝您對我如何實現這一目標的想法?我還需要爲頁碼/ totalPages添加郵票。 – user1646972

+0

爲什麼不在註釋中使用註釋? (如果您要將紙幣打印在紙上,這可能不是一個選項。) –

+0

對不起,我應該更具體。NOTES的意思是我從數據庫中獲取的一些文本,並將其呈現爲PDF上的特定部分。現在,這些數據可能存在,可能不存在,並且可能有任何長度。所以提交的PDF應該有標題的部分,並應顯示文本(如果存在),否則繼續下一節。我正在使用一種替代方法,將整個30頁文檔分成多個模板。這使我可以動態生成包含這些文本字段佔位符的整個頁面。並將合併此頁與其餘。 – user1646972