【发布时间】:2015-04-13 09:05:44
【问题描述】:
我必须将数千个 html 页面从知识库导出到 pdf 文件。我正在使用飞碟库(因为它知道如何正确呈现 html+css),它在引擎盖下使用 itextpdf 进行 pdf 操作。
问题在于,对于大量的 html 文档,我们的服务器因 OOM 错误而失败。这是因为飞碟在创建 pdf 之前渲染内容,这是非常昂贵的操作。
我将导出页面拆分为“桶”,然后将它们附加到结果文件中(如建议的here)。但问题是每个新的“桶”都是从新的页面开始的,即使前一个桶的最后一页有足够的空间。
所以不要这样:
Page
---------------------------
| last row of N-1th bucket|
| first row of Nth bucket |
|.........................|
|_________________________|
我有这个:
Page
---------------------------
| last row of N-1th bucket|
| |
| |
|_________________________|
Page
---------------------------
| first row of Nth bucket |
|.........................|
|.........................|
|_________________________|
我找到了相关线程 - ITextSharp - merge two pdfs in a single page,但也许有办法在创建 pfd 期间将内容附加到最后一页?
非常感谢任何帮助。我还尝试在http://itextpdf.com/sandbox 上找到一些相关示例,但没有任何运气。
提前谢谢你
【问题讨论】:
-
如果您使用XML Worker(也支持 XHTML + CSS),我们可以为您提供帮助,但您使用的是飞碟,它是由专业人士开发的工具不以任何方式隶属于 iText Group,因此您必须希望这些人在 StackOverflow 上提供支持。
-
感谢您的回复。我使用 Flying Saucer b/c 它以特定样式正确呈现 html。这是我们客户的最高优先级。我将尝试使用 XML Worker,看看它是如何处理它的。
-
顺便说一句,它如何处理包含数千页的巨大 html 文件?正如我在问题中提到的,Flying Saucer 使用不同的图形工具“渲染”所有内容,然后将其“复制”为 pdf(当然,这是高级别的)。渲染的上下文会占用大量空间。 XML Worker 是如何工作的?我不会在大文件(数千个 html 页面)上遇到同样的问题吗?还是您的意思是 XML Worker 只允许将内容附加到最后一页?
-
这完全取决于您如何使用 XML Worker。最好的方法是让文档在完成后立即刷新完成的页面。显然,如果您的 HTML 由包含数千行的大型
<table>组成,这将不起作用,但如果您的 HTML 是一系列独立的内容块,那么它可以正常工作。 -
它可以处理带有链接的html文档吗?例如,在巨大的 html 文档的开头有一个链接到它的最后一页(在文档末尾的某个地方)。 XML Worker 是否正确处理此类链接?结果 pdf 文件是否包含正确的链接?
标签: java pdf flying-saucer itextpdf