2013-08-01 3 views
0

OOTB PDF 재 작성기 구성 요소를 사용하려고하지만 일부 시나리오에서는 작동하지 않는 간단한 사용 사례를 위해 PDF를 생성 할 수 있습니다.page2fo.xsl을 통해 PDF 생성을 위해 xml을 트래버스하는 동안 다른 노드를 읽습니다.

시나리오 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:[email protected]"/> 
     </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> 
+0

에 대해 나는 완전히 질문을 이해할 수 없습니다. 두 개의 서로 다른 콘텐츠 구조에 대해 동일한 xsl을 사용할 것으로 예상됩니까? – santiagozky

+0

기본적으로 내 콘텐츠 구조에는 내부에 다른 콘텐츠가 포함되어 있습니다. 예 : 다른 노드에서 오는 주소 및 다른 노드에서 오는 연락처 정보를 갖는 직원 바이오 페이지. – apurvc

+0

Apache FOP에서 해결할 수없는 몇 가지 다른 유스 케이스를 발견 했으므로 PDF 생성 방법을 변경했습니다. 필자는 phantomjs를 사용하여 pdf를 즉시 생성했습니다. – apurvc

답변

0

당신의 노드 (콘텐츠/응용 프로그램 /에서 page.xml)의 기본 XML 렌더링을 사용하여 기본 작업으로 PDF 생성,하지만 당신은 하나 개 이상의 노드에서 정보를 얻을 필요가 있기 때문에 난 그냥 당신을 작성하는 것이 좋습니다 자신의 XML.

- PDF 확장자와 리소스 유형을 선택한 서블릿을 등록하고 필요한 모든 정보와 가장 편리한 구조가 포함 된 XML을 렌더링합니다. (서블릿 내부의 resourceResolver를 사용하여 필요한 노드에 액세스 할 수있다).

그런 다음 pdf rewriter는 기본값 대신 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 
    } 
} 
+0

은 좋은 접근 방식 인 것처럼 보입니다. – apurvc