用Java顺序编写大型PDF

时间:2011-01-03 18:15:29

标签: java pdf-generation memory-management

我正在寻找一个Java库,让您以最少的内存顺序编写大型PDF。我看过的大多数库都必须先在内存中构建文档才能实际编写它。

我必须处理的问题是OutOfMemoryErrors。如果我可以在需要时以编程方式刷新编写器,那将是很好的,例如对于每一页。

有人有任何建议吗?我需要一些带有LGPL许可证的东西(所以不是GPL或iText使用的Affero GPL)。

4 个答案:

答案 0 :(得分:3)

您可以使用iText执行此操作。它支持writing to OutputStreams

答案 1 :(得分:1)

Docmosis的免费版本具有相当开放的许可,因此它可能适合您。它使用的模板方法与构建代码不同。 Docmosis以基于流的方式处理所有文档,因为它旨在用于单独的并行使用和大型文档。它还允许您将最耗费CPU的部件处理卸载到另一台服务器。希望有所帮助。

答案 2 :(得分:0)

我实际上,和你一样有同样的问题,一个朋友帮助我,但是他在C#中使用了一个名为GhostScriptSharp的api,你应该检查它。

我不能给你一份代码副本,因为它受版权保护,但我相信它会帮助你,因为我认为这个工具是在Java上构建的。

答案 3 :(得分:0)

jPod可以交换间接对象并支持增量写入。

这仍然不是最佳的,因为你需要在每次冲洗时增加“增量”,但总比没有好......

修改

Öhhh - 这是自我描述代码的着名例子之一:-)你是对的,不是很多教程或者那个 - 但是Javadoc非常好。

  • jPod默认写入增量。请参阅“CosDocument.setWriteModeHint”以设置为完整模式。
  • 示例“CreateDoc”和“AppendPage”是如何添加页面的简单示例。您也可以这样做,每10或100页调用“保存”。这应该“软化”对内存中页面的所有引用,如果不是由你的其他引用保存,则可以进行垃圾回收。

这仍然是您填充页面的问题?这些也是处理内容流的例子(DrawText,..)。 但是 jPod不像iText,jasper或者其他什么。只有PDF模型抽象。你没有“Layouter”或“Renderer”来创建文本,html或类似内容的页面内容。你是怎么做到的?