2013-12-16 71 views
2

我有一個窗體,我已經在MS Word中創建,然後轉換爲PDF(窗體),然後我加載這在使用PDF閱讀器,然後我有一個壓模創建填寫字段,如果我想添加第二頁使用相同的模板(窗體)我如何做到這一點,並使用相同的信息填充一些字段itext AcroFields形式到第二頁,需要保持相同的模板

我已經設法與另一個新頁面。讀者可我怎麼戳信息到這個頁面作爲AcroFields將具有相同的名稱#

我這是怎麼實現的是:

 stamper.insertPage(1,PageSize.A4); 
     PdfReader reader = new PdfReader("/soaprintjobs/templates/STOTemplate.pdf"); //reads the original pdf 
     PdfImportedPage page; //writes the new pdf to file 
     page = stamper.getImportedPage(reader,1); //retrieve the second page of the original pdf 
     PdfContentByte newPageContent = stamper.getUnderContent(1); //get the over content of the first page of the new pdf 
     newPageContent.addTemplate(page, 0,0); 

謝謝

回答

2

Acroform字段具有屬性,即具有相同名稱的字段被認爲是相同的字段。它們具有相同的價值。因此,如果第1頁和第2頁上的字段名稱相同,它們將始終顯示相同的值。如果您更改第1頁上的值,則它也會在第2頁上更改。

在某些情況下,這是可取的。您可能有一個帶有參考號碼的多頁表格,並且希望在每個頁面上重複該參考號碼。在這種情況下,您可以使用具有相同名稱的字段。

但是,如果您想在一個文檔中使用不同數據的同一表單的多個副本,則會遇到問題。你將不得不重新命名錶單域,使它們是唯一的。

在iText中,您不應該使用getImportedPage()來複制Acroforms。從iText 5.4.4開始,您可以使用PdfCopy類。在早期版本中應該使用PdfCopyFields類。

下面是一些複製Acroforms和重命名字段的示例代碼。 iText 5.4.4及更高版本的代碼在評論中。

public static void main(String[] args) throws FileNotFoundException, DocumentException, IOException { 

    String[] inputs = { "form1.pdf", "form2.pdf" }; 

    PdfCopyFields pcf = new PdfCopyFields(new FileOutputStream("out.pdf")); 

    // iText 5.4.4+ 
    // Document document = new Document(); 
    // PdfCopy pcf = new PdfCopy(document, new FileOutputStream("out.pdf")); 
    // pcf.setMergeFields(); 
    // document.open(); 

    int documentnumber = 0; 
    for (String input : inputs) { 
     PdfReader reader = new PdfReader(input); 
     documentnumber++; 
     // add suffix to each field name, in order to make them unique. 
     renameFields(reader, documentnumber); 
     pcf.addDocument(reader); 
    } 
    pcf.close(); 

    // iText 5.4.4+ 
    // document.close(); 

} 

public static void renameFields(PdfReader reader, int documentnumber) { 
    Set<String> keys = new HashSet<String>(reader.getAcroFields() 
      .getFields().keySet()); 
    for (String key : keys) { 
     reader.getAcroFields().renameField(key, key + "_" + documentnumber); 
    } 
} 
+0

我有一個文檔有多個頁面,在每個頁面中有一個字段在所有頁面中都有相同的鍵。密鑰名稱是「abc」。但我無法爲第二頁和稍後頁面中的「abc」設置值。請建議我更好的選擇來實現這一點。 –

相關問題