使用Sejda1.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.2MB的总结果中)。
我的第一个想法是:流没有被正确关闭!所以我将os.close();添加到CompletionListener的末尾,仍然是相同的问题。
备注:
StreamTaskOutput的原因是这个合并逻辑将存在于一个web应用程序中,合并的PDF将直接通过HTTP发送。我可以存储临时文件并为其提供服务,但这是一个黑客。编辑
原来,原因是StreamTaskOutput将结果压缩到一个ZIP文件中!OutputWriterHelper.copyToStream()是罪魁祸首。如果我将merged.pdf重命名为merged.zip,它是一个有效的ZIP文件,其中包含一个完全有效的merged.pdf文件!
有谁(图书馆的亲爱的作者)能评论一下为什么会发生这种情况吗?
发布于 2015-08-13 07:07:38
这样做的想法是,当任务消耗产生多个输出文档的MultipleOutputTaskParameters时,StreamTaskOutput必须对它们进行分组,以便能够将它们全部写入流输出。不幸的是,Sejda目前对SingleOutputTaskParameters应用了相同的逻辑,这就是您的问题所在。我们可以在Sejda2.0中修复这个问题,因为在SingleOutputTaskParameters的情况下直接流出文档是更有意义的。对于Sejda1.x,我不知道如何解决与现有行为兼容的问题。
https://stackoverflow.com/questions/31961299
复制相似问题