2016-07-06 15 views
0

PDFBox apiは少ないファイル数で問題なく動作します。しかし、私は1つに10000のPDFファイルをマージする必要があり、私は10000ファイル(約5GBの)を渡すときに5GBのRAMを取って、最終的にメモリから外れます。 PDFBoxにそのような要件の実装がいくつかあります。 私はAutoClosedInputStreamを使用してそれを調整しようとしましたが、これは読み込み後に自動的に閉じられますが、出力は同じです。最も効果的な方法でpdfboxを10000 pdfにマージする方法

答えて

1

ここでも同様のシナリオがありますが、1つのドキュメントで1000件のドキュメントのみをマージする必要があります。

私はPDFMergerUtilityクラスを使用しようとしましたが、私はOutOfMemoryErrorとなりました。そこで、私は自分のコードをリファクタリングして、PDFMergerUtilityを使用する代わりに、最初のページを読み込み(私のソースドキュメントは1ページのみ)読み込み、マージしました。そして今はうまくいきます。はもうありません。

public void merge(final List<Path> sources, final Path target) { 
    final int firstPage = 0; 
    try (PDDocument doc = new PDDocument()) { 
     for (final Path source : sources) { 
      try (final PDDocument sdoc = PDDocument.load(source.toFile(), setupTempFileOnly())) { 
       final PDPage spage = sdoc.getPage(firstPage); 
       doc.importPage(spage); 
     } 
    } 

    doc.save(target.toAbsolutePath().toString()); 

} catch (final IOException e) { 
    throw new IllegalStateException(e); 
} 

}

関連する問題