3

ファイルシステムの使用を防ぐために、 ByteArrayOutputStreamPdfWriterを使用してサーブレット内から iText for Java を使用して PDF を動的に作成するシステムを作成しています。

動的コンテンツが完成したら、動的に作成された PDF の最後にいくつかの既存の PDF ファイル ページを追加できるようにしたいと考えています。

iText を使用して PDF を連結するサンプル コードを見てきましたが、PdfCopyを使用してこれを実現しています。PdfCopyの大きな前提は、連結されるすべてのファイルがファイル システム上に存在することです。

ByteArrayOutputStreamとして存在するメモリ内 PDF の末尾に既存のファイルを連結することは可能ですか?

それまでの間、最初の動的ドキュメントに一時ファイルを使用しましたが、可能であればその依存関係を削除したいと考えています。

ありがとう、

アレン

4

2 に答える 2

4

PdfReaderファイルへのパスを使用してのみインスタンスを作成できると想定しています。この仮定は間違っています。API ドキュメントを参照してください。baosが の場合ByteArrayOutputStream、次のようにリーダー インスタンスを簡単に作成できます。

PdfReader reader = new PdfReader(baos.toByteArray());
于 2013-07-09T16:03:50.933 に答える
1

(さまざまなドキュメント)のリストがあれば、この方法で(これに基づいて追加InputStreamできます。OutputStream

private void doMerge(List<InputStream> list, OutputStream outputStream)
        throws DocumentException, IOException {
    Document document = new Document();
    PdfCopy copy = new PdfCopy(document, outputStream);
    document.open();
    int n;
    for (InputStream in : list) {
        PdfReader reader = new PdfReader(in);
        for (int i = 1; i <= reader.getNumberOfPages(); i++) {
            n = reader.getNumberOfPages();
            // loop over the pages in that document
            for (int page = 0; page < n; ) {
                copy.addPage(copy.getImportedPage(reader, ++page));
            }
            copy.freeReader(reader);
            reader.close();
        }
    }
    outputStream.flush();
    document.close();
    outputStream.close();
}
于 2013-07-09T15:16:51.570 に答える