0

我正在尝试 OOTB PDF 重写器组件,并且能够为简单的用例生成 PDF,但是它在某些情况下不起作用。

场景1:当页面有数据存储在单个节点时能够生成PDF。场景2:分页引用多个节点时无法生成PDF。

    <xsl:template match="jcr:content">
    <xsl:if test="@articleTitle">
        <fo:block font-size="30pt" 
            text-align="start" font-family="DinProLight">
            <xsl:value-of select="@articleTitle" />
        </fo:block>
    </xsl:if>

    <xsl:if test="@publishDate">
        <fo:block font-size="18pt" color="#777777" text-align="start" font-family="georgia;" 
        font-style="italic" padding-bottom="9px">
            <xsl:value-of select="concat(substring(@publishDate,9,2),'-',substring(@publishDate,7,2),substring(@publishDate,0,5))" />
        </fo:block>
    </xsl:if>

    <xsl:if test="@authorPath"> 
        <fo:block font-size="18pt" color="#777777"  padding="3px" text-align="start">
            <!--Below Code works fine -->
            <fo:external-graphic src="url('sling://etc/designs/XXXX/images/logo.jpg')" content-type="content-type:image/jpeg"/>         
            <!--Below Code Fails -->
            <xsl:value-of select="sling://content/XXXX/en/perspectives/tst_artcl/jcr:content@fullName"/>
        </fo:block>
    </xsl:if>


    <xsl:if test="@noOfViews">
        <fo:block font-size="11pt" color="#777777" text-align="right" font-family="arial" padding-bottom="9px" border-bottom="1px solid #777777">
            <xsl:value-of select="concat(@noOfViews,' Views')" />
        </fo:block>
    </xsl:if>
    <xsl:apply-templates />
</xsl:template>
4

1 回答 1

0

默认情况下,PDF 生成通过使用节点的默认 xml 呈现(content/app/page.xml)来工作,但是由于您需要从多个节点获取信息,我建议您只创建自己的 xml。

- 注册一个带有 PDF 扩展名和您选择的资源类型的 servlet,并呈现一个包含您需要的所有信息并具有最方便结构的 xml。(您可以使用 servlet 中的 resourceResolver 来访问您需要的任何节点)。

然后 pdf 重写器将使用您的 xml 表示而不是默认的表示。

例如

@SlingServlet(
    description = "Employee PDF",
    extensions = { "pdf" },
    resourceTypes = { "greatapp/page/employee" },
    methods = { "GET" })
 public class EmployeePDFServlet extends SlingSafeMethodsServlet {

   protected void doGet(final SlingHttpServletRequest request, final SlingHttpServletResponse response) throws ServletException,
        IOException {
     //generate an xml here
    }
 }
于 2013-08-01T13:40:46.927 回答