-1

使用 iText 库,我可以合并静态 PDF 文件,但不能合并动态文件。

我怎样才能完成这项任务?

编辑:(从下面的评论中收集):
很抱歉没有解释清楚动态pdf的意思。我现在正在写。
动态 pdf 文件由 adobe livecycle Designer 创建。它叫“ XFA pdf files”。
Ravinder 的代码非常适用于静态 pdf。但不适用于 XFA pdf 文件。
它们在合并(合并)时不可读。

我使用了这个动态的pdf文件。

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

如何将它们合并到一个 pdf 文件中?

4

1 回答 1

1

更新答案

您拥有的 PDF 文件是使用XFA (XML Forms Architecture).
iText 仅部分支持 XFA,但完全支持 AcroForms。

您需要展平 XFA 表单,然后根据需要使用。

您可以在以下位置参考有关处理 XFA 表格的各种讨论:

  1. 动态 XFA 表格;使用 Adob​​e LiveCycle Designer 创建的表单
  2. 如何展平动态 XFA 表单?
  3. iText 演示:PDF 中的动态 XFA 表单
  4. 演示:XFA 到 PDF(Bruno Lowagie 的在线公报)
  5. XfaMovie Java 示例
  6. 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
于 2012-07-12T15:43:37.633 回答