当有 Adobe Experience Manager 内置的 pdf 重写器时,我们如何处理具有不同设计的页面。 我知道有一个自动生成pdf的文件page2fo.xsl,我们需要在page2fo.xsl中指定规则。但是我正在工作的网站不仅仅是一种设计,它在不同的国家和不同的语言中都有自己的设计。 在这种情况下,我们如何通过将 url 作为 .pdf 来将 html 转换为 pdf。 我们是否需要为每个设计编写 xsl>? 我们是否有任何机制可以在 Apache FOP 附带的 Adobe Experience Manager 中处理这种情况? 如果有任何机制,你能提供它的样本来处理不同的设计吗?
最佳答案
我查看了使用 page2fo.xsl 生成 PDF,甚至就此联系了 Adobe 支持。您的所有设计只能有一个文件,因为它在 OSGi 中运行的最终 XSLTTransformer 服务中进行了硬编码。您只能在应用程序下方使用自定义配置覆盖配置“/libs/cq/config/rewriter/pdf”,例如 “/apps/cq/config/rewriter/pdf”,您可以在其中引用与基础页面不同的 page2fo.xsl。为了在您的 XSL 中支持多种设计,我建议使用与您页面的 cq:designPath 相匹配的模板。这里唯一的问题是您需要在每个页面上使用此属性,而不是像在编辑 UI 中那样依赖继承。 沿线的东西:
<xsl:template match="*[contains(@cq:designPath,'/etc/designs/yourdesign')]">
<xsl:apply-templates select="yourdesign"/>
</xsl:template>
但我可以向您保证,这将是一团糟并且难以维护,因为您实际上只有一个文件用于所有自定义 XSLTTransformation。
我认为在你的情况下我会考虑使用另一个 PDF 框架:
- PDFBox来自 Apache 。我用它制作了一个 PoC,创建 PDF 很痛苦,因为您需要了解 PDF 语法
- DynamicPDF :我能够在 2 天内重写我的 PDFBox PoC,甚至添加功能。所以我会推荐它。您可以下载评估版,周围有很多示例。
关于pdf-generation - 使用 CQ5 的 Apache FOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24415396/