我正在尝试确定MY xsl:fo生成的PDF文件是否会超过一页,而不会实际生成输出。我们在服务器上使用Apache-FOP 0.95,并且在传递到XSL-FO模板之前使用PHP DOMDocument类生成XML数据。
我的问题:
那里有PHP库可以模拟xsl:fo输出并向我发送我可以在我的应用程序中使用的报告吗?
或者,Apache FOP本身(或兄弟Java应用程序)是否有办法在不实际生成文件的情况下发送报告?我一直在阅读FOP文档,除了一些我无法完全理解的内容之外,我还没有找到一种方法在FOP中做到这一点。
答案 0 :(得分:2)
如果没有通过布局引擎实际运行文档,则无法“模拟”文档。此外,不同的FO处理器可能会产生略微不同的输出,因此您不能依赖于其中一个的结果来猜测另一个的页数。
您可以使用Apache FOP 0.95生成所谓的Area Tree XML (or intermediate format),它基本上将布局结果输出为XML文件而不是PDF。然后可以使用XPath(或XSLT)检查该XML文件以确定页数。 XML格式未正式描述,但您将很快看到如何确定页数。因此,通过在命令行中使用“-at application / pdf simulation.xml”而不是“-pdf output.pdf”,可以生成该XML格式。当然,在这种情况下需要完成生成最终文档所需的大部分处理,因此重新运行整个文档以进行PDF生产将花费相当长的时间。好消息是您可以再次使用AT XML作为输入来生成最终PDF,因此不必再次运行布局阶段(请参阅文档中的“-atin”参数)。
当然,另一种可能性是使用PDF工具来确定最终文档的页数。
HTH