-1

iText ライブラリを使用すると、静的な PDF ファイルを結合できますが、動的な 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 フォーム。Adobe LiveCycle Designer で作成されたフォーム
  2. 動的 XFA フォームをどのようにフラット化しますか?
  3. iText デモ: PDF の動的 XFA フォーム
  4. デモ: XFA to PDF (Bruno Lowagie のオンライン ガゼット)
  5. XfaMovie Java の例
  6. XFA から PDF: itextpdf.com の記事/例

そしてもっとかもしれません...

このXfaMovie例は、要件を解決するのにより役立ちます。


元の回答:

すべての動的 PDF ファイルのフォームを使用して、関連するオブジェクトを構築byte[]し、それらを組み合わせて 1 つの PDF ファイルを生成できます。 InputStreamPdfReader

この例ではインスタンスを使用していますが、動的 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 に答える