更新答案:
您拥有的 PDF 文件是使用XFA (XML Forms Architecture)
.
iText 仅部分支持 XFA,但完全支持 AcroForms。
您需要展平 XFA 表单,然后根据需要使用。
您可以在以下位置参考有关处理 XFA 表格的各种讨论:
- 动态 XFA 表格;使用 Adobe LiveCycle Designer 创建的表单
- 如何展平动态 XFA 表单?
- iText 演示:PDF 中的动态 XFA 表单
演示:XFA 到 PDF(Bruno Lowagie 的在线公报)
- XfaMovie Java 示例
- XFA 到 PDF:itextpdf.com 上的文章/示例
并且可能更多...
该XfaMovie
示例将更有助于解决您的要求。
原答案:
您可以使用所有动态 pdf 文件的byte[]
或InputStream
形式来构建相关PdfReader
对象并将它们组合生成单个 PDF 文件。
在示例中,我使用的是实例,但您可以从动态 PDF 内容FileInputStream
生成实例并使用它。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