Sejda 1.0.0.RELEASE を使用して、基本的にPDF を分割するチュートリアルに従いましたが、代わりにマージを試みました ( org.sejda.impl.itext5.MergeTask
、MergeParameters
、 ...)。すべてがうまく機能しますFileTaskOutput
:
parameters.setOutput(new FileTaskOutput(new File("/some/path/merged.pdf")));
ただし、これをStreamTaskOutput
正しく変更できません。
OutputStream os = new FileOutputStream("/some/path/merged.pdf");
parameters.setOutput(new StreamTaskOutput(os));
parameters.setOutputName("merged.pdf");
エラーは報告されませんが、結果のファイルは Preview.app で読み取ることができず、上記で保存したファイルよりも約 31 kB 小さくなります (合計結果の ~1.2 MB のうち)。
私の最初のアイデアは、ストリームが適切に閉じられていないということでした! だから私os.close();
はの最後に追加しましたがCompletionListener
、それでも同じ問題です。
備考:
- このマージ ロジックを使用する必要があるの
StreamTaskOutput
は、このマージ ロジックが Web アプリに存在し、マージされた PDF が HTTP 経由で直接送信されるためです。一時ファイルを保存して提供することもできますが、それはハックです。 - ライセンスの問題により、タスクの iText 5 バージョンを使用できません。
編集
その理由はStreamTaskOutput
、結果を ZIP ファイルに圧縮するためです。OutputWriterHelper.copyToStream()
が犯人です。名前merged.pdf
をに変更するとmerged.zip
、完全に有効なファイルを含む有効な ZIP ファイルになりmerged.pdf
ます。
なぜこれが起こっているのかについて、誰か(ライブラリの親愛なる作者)がコメントできますか?