[英]Merging PDFs with Sejda fails with stream output
使用Sejda 1.0.0.RELEASE,我基本上按照本教程拆分PDF,但是嘗試合並( org.sejda.impl.itext5.MergeTask
, MergeParameters
等)。 使用FileTaskOutput
可以很好地工作:
parameters.setOutput(new FileTaskOutput(new File("/some/path/merged.pdf")));
但是我無法將StreamTaskOutput
正確更改為StreamTaskOutput
:
OutputStream os = new FileOutputStream("/some/path/merged.pdf");
parameters.setOutput(new StreamTaskOutput(os));
parameters.setOutputName("merged.pdf");
沒有錯誤報告,但是預覽文件無法讀取生成的文件,並且比上面保存的文件小31 KB(約合1.2 MB)。
我的第一個想法是:流沒有正確關閉! 所以我添加了os.close();
到CompletionListener
的末尾,仍然是同樣的問題。
備注:
StreamTaskOutput
的原因是此合並邏輯將存在於Web應用程序中,並且合並的PDF將直接通過HTTP發送。 我可以存儲臨時文件並提供該文件,但這是一個hack。 原來,原因是StreamTaskOutput
將結果壓縮為ZIP文件! 罪魁禍首是OutputWriterHelper.copyToStream()
。 如果我將merged.pdf
重命名為merged.zip
,這是一個有效的ZIP文件,其中包含完全有效的merged.pdf
文件!
任何人(圖書館的親愛的作者)都可以評論為什么會這樣嗎?
這個想法是,當任務使用產生多個輸出文檔的MultipleOutputTaskParameters
, StreamTaskOutput
必須對其進行分組,以便能夠將所有文檔寫入流輸出。 不幸的是,Sejda當前將相同的邏輯應用於SingleOutputTaskParameters
,因此是您的問題。 因為它更有意義,直接流出來的文檔中的情況下,我們可以在Sejda 2.0解決這個SingleOutputTaskParameters
。 對於Sejda 1.x,我不確定如何解決與現有行為兼容的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.