2012-07-12 92 views
-1

使用iText庫,我可以合併靜態PDF文件,但不能合併動態文件。如何在Java中將動態PDF文件與iText庫合併?

我該如何完成這項任務?

編輯:(從下面的評論收集):
我很抱歉,沒有解釋清楚的動態PDF手段。我正在寫作。
動態PDF文件由Adobe Livecycle Designer創建。它稱爲「XFA pdf files」。
Ravinder的代碼很適合靜態pdf。但不適用於XFA pdf文件。
它們在合併(Combine)上不可讀。

我用這個動態的pdf文件。

  1. PDF - > turbobit.net/9rn2r3quw5gx.html
  2. PDF - > turbobit.net/4e6q7a1ts4jw.html

我怎樣才能把它們合併成單一的PDF文件?

+1

你嘗試過什麼?請包括一些代碼,顯示您嘗試做什麼,以及爲什麼它不起作用。 – 2012-07-12 15:46:08

回答

2

更新答

你正在使用XFA (XML Forms Architecture)內置的PDF文件。
iText僅支持XFA,但支持AcroForms。

您需要鋪平XFA表格,然後根據需要使用。

你可以參考各種討論關於在處理XFA表單:

  1. dynamic XFA forms; forms created with Adobe LiveCycle Designer
  2. How do you flatten a dynamic XFA form?
  3. iText Demo: Dynamic XFA forms in PDF
  4. 演示:XFA至PDF(布魯諾Lowagie的網上公告)
  5. XfaMovie Java example
  6. XFA to PDF: articles/examples on itextpdf.com

而且可能會更...

XfaMovie例子會更有助於解決您的要求。


原來的答案

您可以使用byte[]InputStream形式的所有動態的PDF文件的構建相關PdfReader對象,並結合他們產生一個單一的PDF文件。

在此示例中,我使用的是FileInputStream實例,但您可以從動態PDF內容生成ByteArrayInputStream實例並使用它。

import com.itextpdf.text.pdf.PdfCopyFields; 
import com.itextpdf.text.pdf.PdfReader; 
//import com.lowagie.text.pdf.PdfCopyFields; 
//import com.lowagie.text.pdf.PdfReader; 

public class CombineDynamicPdfContents 
{ 
    // throws FileNotFoundException, IOException, DocumentException 
    public static void main(String ... a) throws Exception 
    { 
     String fileHome = System.getProperty("user.home") + "/Desktop/"; 

     System.out.println("Start combine PDF files"); 
     FileInputStream fis1 = new FileInputStream(fileHome + "pdf-file-1.pdf"); 
     FileInputStream fis2 = new FileInputStream(fileHome + "pdf-file-2.pdf"); 

     // now create pdfreaders using inputstreams of pdf contents 
     PdfReader file1 = new PdfReader(fis1); 
     PdfReader file2 = new PdfReader(fis2); 

     FileOutputStream fos = new FileOutputStream(fileHome + "Pdf-Combined.pdf"); 
     PdfCopyFields copy = new PdfCopyFields(fos); 

     copy.addDocument(file1); 
     copy.addDocument(file2); 
     copy.close(); 

     System.out.println("Done ..."); 
    } // psvm(..) 
} // class CombineDynamicPdfContents 
+0

我很抱歉沒有解釋清楚動態pdf的意思。我正在寫作。 動態PDF文件由Adobe Livecycle Designer創建。它稱爲「XFA pdf文件」。 您的(Ravinder)代碼非常適合靜態pdf(謝謝)。 但這個XFA pdf文件不會與它們合併(合併)。 我用這個動態的pdf文件。 1.Pdf - > http://turbobit.net/9rn2r3quw5gx.html 2.Pdf - > http://turbobit.net/4e6q7a1ts4jw.html 請問,你會嘗試它爲我合併? – 2012-07-12 17:19:01

+0

這是替代文件鏈接:http://www.dosya.tc/server18/hHYsaN/Tries.rar.html – 2012-07-12 17:28:20

+0

@Gunesismail檢查我的更新答案。 – 2012-07-14 15:59:08