0

ByteArrayOutputstreams特定のワークフローのさまざまな部分にPDFレポートが書き込まれる束があります。私はこれを達成するためにITextを使用します。最後に、これらすべての単一のByteArrayOutputstreamをより大きなByteArrayOutputstreamものにグループ化して、すべてのpdfレポートをグループ化します。

Apache Commonsライブラリを調べましたが、何も役に立ちませんでした。

私が知っている1つの方法は、これらのそれぞれをに変換ByteArrayOutputstreamsbyte[]、それを使用System.arraycopyしてそれらをより大きなものにコピーすることbyte[]です。これに伴う問題は、結果のサイズを事前に宣言する必要があるため、byte[]理想的ではないことです。

見逃した可能性のあるByteArrayOutputStreamsをコピー/追加/連結する他の方法はありますか?

4

3 に答える 3

1

toByteArray()結果の1つを除くすべてを残りの1つに書き込みます。

于 2012-07-11T08:02:27.847 に答える
1

そのためにを使用することができますList<Byte[]>。リストに移動してバイトを追加できます。

List<Byte[]> listOfAllBytes = new ArrayList<Byte[]>;
ByteArrayOutputstreams byteArray = //...
listOfAllBytes.add(byteArray.toByteArray);

最後に、完全なバイト配列を取り戻すことができます。

于 2012-07-11T07:59:46.390 に答える
0
public class Concatenate {

    /** The resulting PDF file. */
    public static final String RESULT
        = "path/to/concatenated_pdf.pdf";

    public static void main(String[] args)
        throws IOException, DocumentException {
        String[] files = { "1.pdf", "2.pdf" };
        Document document = new Document();
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT));
        document.open();
        PdfReader reader;
        int n;
        // loop over the documents you want to concatenate
        for (int i = 0; i < files.length; i++) {
            reader = new PdfReader(files[i]);
            // loop over the pages in that document
            n = reader.getNumberOfPages();
            for (int page = 0; page < n; ) {
                copy.addPage(copy.getImportedPage(reader, ++page));
            }
            copy.freeReader(reader);
        }
        document.close();
    }
}
于 2012-07-12T07:18:01.643 に答える