java - 如何限制xsl-fo最多可打印10页pdf文档?

标签 java xsl-fo apache-fop

我使用apache FOP将数据导出为pdf文件。
每次我尝试导出大表(超过4000个原始数据)时,我都会收到“ outOfMemoryError”。
我的问题-如何在xsl-fo中设置限制以在一个pdf文档中最多打印10页?

最佳答案

一般来说,您不能。

XSL的指定方式,您不能限制页面数。有一个force-page-count属性(请参见https://www.w3.org/TR/xsl11/#force-page-count),但这是强制fo:page-sequence在奇数或偶数页上结束,而不是强制特定数量的页。您可以尝试将fo:page-sequence-master(请参阅https://www.w3.org/TR/xsl11/#fo_page-sequence-master)设置为在一定数量的页面后用完替代方法,但是您可能会发现格式化程序将通过继续操作从错误中恢复(允许这样做)。重用上次使用的页面母版。

有关内存使用情况的FOP建议位于https://xmlgraphics.apache.org/fop/2.3/running.html#memory

您可以(如FOP建议所述)将表格拆分为多个fo:page-sequence吗? FOP在完成页面序列后倾向于释放一些内存。

您可以尝试使用其他格式化程序。它可能在您的表上做得更好,可能经过两次处理(在有很多前向引用时最有用),或者可能只格式化有限数量的页面。例如,AH Formatter可以进行两次遍历格式化,并且只能输出指定的起始页和结束页之间的页(请参见https://www.antennahouse.com/product/ahf66/ahf-xslcmd.html),而XEP可以输出前n页以输出SVG和XHTML(请参见http://www.renderx.com/reference.html#Generate_Each_Page_as_separate_file) 。

关于java - 如何限制xsl-fo最多可打印10页pdf文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56395918/

相关文章:

java - 适用于 GAE 的 MathML 到图像(如 JEuclid)

java - 在 Apache FOP 中,如何以编程方式设置字体库,并且仍然加载 <directory> 中的字体?

java - 错误 : No resource identifier found for attribute `requestLegacyExternalStorage` and `preserveLegacyExternalStorage` in package `android`

java - 修复Java代码中的JRE错误并重新编译应用程序

java - Java 中预期 XSL-FO 设计器的 UI

xml - XSL-FO 渲染在页面顶部具有区域主体。我该如何修复?

java - XSLT 2.0 中的 HashMap 迭代

java - 微服务-不同层中变量的定义。设计最佳实践

java - Java 如何保证安全?

java - 使用 Java 和 Apache Batik 从 SVG 生成多页 PDF