[英]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.