簡體   English   中英

使用Sejda合並PDF失敗,流輸出

[英]Merging PDFs with Sejda fails with stream output

使用Sejda 1.0.0.RELEASE,我基本上按照本教程拆分PDF,但是嘗試合並( org.sejda.impl.itext5.MergeTaskMergeParameters等)。 使用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。
  • 由於許可問題,我無法使用該任務的iText 5版本。

編輯

原來,原因是StreamTaskOutput將結果壓縮為ZIP文件! 罪魁禍首是OutputWriterHelper.copyToStream() 如果我將merged.pdf重命名為merged.zip ,這是一個有效的ZIP文件,其中包含完全有效的merged.pdf文件!

任何人(圖書館的親愛的作者)都可以評論為什么會這樣嗎?

這個想法是,當任務使用產生多個輸出文檔的MultipleOutputTaskParametersStreamTaskOutput必須對其進行分組,以便能夠將所有文檔寫入流輸出。 不幸的是,Sejda當前將相同的邏輯應用於SingleOutputTaskParameters ,因此是您的問題。 因為它更有意義,直接流出來的文檔中的情況下,我們可以在Sejda 2.0解決這個SingleOutputTaskParameters 對於Sejda 1.x,我不確定如何解決與現有行為兼容的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM