gpt4 book ai didi

java - 使用 Sejda 合并 PDF 失败并显示流输出

转载 作者:行者123 更新时间:2023-12-01 11:14:52 24 4
gpt4 key购买 nike

使用Sejda 1.0.0.RELEASE,我基本上遵循tutorial for splitting a PDF但尝试合并(org.sejda.impl.itext5.MergeTaskMergeParameters,...)。一切都与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)。

我的第一个想法是:流没有正确关闭!于是我在CompletionListener末尾添加了os.close();,还是同样的问题。

备注:

  • 我需要使用 StreamTaskOutput 的原因是此合并逻辑将存在于 Web 应用程序中,并且合并的 PDF 将直接通过 HTTP 发送。我可以存储临时文件并提供该文件,但这是一种黑客行为。
  • 由于许可问题,我无法使用该任务的 iText 5 版本。
<小时/>

编辑

事实证明,原因是 StreamTaskOutput 将结果压缩到 ZIP 文件中! OutputWriterHelper.copyToStream() 是罪魁祸首。如果我将 merged.pdf 重命名为 merged.zip,那么它就是一个有效的 ZIP 文件,其中包含完全有效的 merged.pdf 文件!

有人(亲爱的图书馆作者)可以评论一下为什么会发生这种情况吗?

最佳答案

这个想法是,当任务使用 MultipleOutputTaskParameters 生成多个输出文档时,StreamTaskOutput 必须将它们分组以便能够将它们全部写入流输出。不幸的是,Sejda 目前对 SingleOutputTaskParameters 应用相同的逻辑,因此出现了您的问题。我们可以在 Sejda 2.0 中修复此问题,因为在 SingleOutputTaskParameters 的情况下直接流式传输输出文档更有意义。对于 Sejda 1.x,我不确定如何解决与现有行为保持兼容的问题。

关于java - 使用 Sejda 合并 PDF 失败并显示流输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31961299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com