2017-12-21 4 views
3

XML (TEI 스키마 사용)으로 복사 된 큰 중세 원고가 있습니다. xsl : fo와 Apache FOP를 사용하여 PDF로 처리하고 있습니다. 파일은 아래와 같이 중첩 된 <body>, <p>, <seg>을 사용하여 생성됩니다. 때로는 <add>이 여백 메모로 사용됩니다.XSL : 여백 노트를 표시하기위한 FO float - 쉼표 문서

<body> 
    <p> 
    <title>title here</title> 
    <seg>Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     Quisque a orci non mauris convallis imperdiet consequat nec 
     purus. Cras mollis lacus vel lectus facilisis, non 
     hendrerit velit tempor. Phasellus tempor urna vel accumsan 
     dignissim.</seg> 
    <seg>Aliquam porta eu nunc sed laoreet. 
     Sed<add type='margin_gloss'>Some margin note here</add> 
     non nulla consectetur, lobortis tortor ac, 
     placerat nunc. Nulla viverra finibus est nec efficitur. Donec 
     nisi nisl, tincidunt dapibus purus pretium, rhoncus volutpat 
     tortor. Cras fringilla tellus tortor, at 
     ultricies mi cursus at. Nulla facilisi.</seg> 
    <seg>Quisque id mi nisl. In in mauris id leo malesuada hendrerit. 
     Orci varius natoque 
     penatibus et magnis dis parturient montes, nascetur ridiculus 
     mus. Nulla sit amet 
     commodo mauris.</seg> 
    </p> 
</body> 

XML 파일은 대규모이기 때문에 전체 원고를 작성하기 위해이 문서의 수백을 가지고 <xi:include>의를 사용하여 하나 개의 마스터 XML 파일이 있습니다.

나는 성공적으로 다음과 같은 기본 지침으로 PDF로이 처리 한

:

<xsl:template match="/"> 
     <fo:root> 
     <fo:layout-master-set> 
      <fo:simple-page-master 
       master-name="page-recto" 
       page-height="29.7cm" page-width="21cm" 
       margin-top="2cm" margin-bottom="2cm" 
       margin-left="2cm" margin-right="1cm"> 
       <fo:region-body 
        region-name="xsl-region-body"/> 
      </fo:simple-page-master> 
     </fo:layout-master-set> 

     <fo:page-sequence master-reference="page-recto"> 
      <fo:flow flow-name="xsl-region-body" 
       font-family="Times" font-weight="normal" 
       font-size="8pt" space-before="8pt" space-after="8pt" 
       text-align="justify" end-indent="120pt"> 
       <xsl:apply-templates/> 
      </fo:flow> 
     </fo:page-sequence> 

    </fo:root> 
    </xsl:template> 

    <xsl:template match="body/p"> 
    <fo:block 
     page-break-inside="avoid" 
     font-size="9pt" font-weight="bold" 
     padding-bottom="1cm" end-indent="120pt"> 
     <xsl:value-of select="tei:title"/> 
     <xsl:apply-templates/> 
    </fo:block> 
    </xsl:template> 


    <xsl:template match="seg"> 
     <fo:block id="@xml:id" 
      font-family="Times" font-weight="normal" 
     font-size="8pt" space-before="8pt" 
     space-after="8pt" text-align="justify" 
     end-indent="120pt"> 
      <xsl:apply-templates/> 
     </fo:block> 
    </xsl:template> 

이 나에게이 페이지를 좋아 성공적인 결과를 제공합니다 : I 오른쪽 들여 쓰기 한

Successful sample

을 측면 (끝) 여백 메모를위한 공간을 만들기 위해. 예를 들어, 첫 번째 <p>의 네 번째 <seg>에는 여백 메모 'Fabri +'가 있습니다.

<xsl:template match="body/p//add[@type='margin_gloss']"> 
    <fo:float float="end"> 
      <fo:block-container> 
       <fo:block> 
        <xsl:value-of select="./s/text()"/> 
       </fo:block> 
      </fo:block-container> 
     </fo:float> 

</xsl:template> 

그리고이 재해 (/ 화살표 문제에 대한 나의 가이드 빨간색 텍스트 있습니다) 얻을 : 그것은

내가 '부동'여백 광택에 다음 템플릿을 추가 <add type=margin_gloss>Fabri +</add>을 인코딩됩니다. 플로트가있는 템플릿은 내가 추측 할 수없는 3 가지 작업을 수행했습니다. float은 네 번째 세그먼트 옆에 나타나야하지만 그 대신 아래에 있으며 <p>과 병합됩니다. 제 4 회 <seg>가 사라졌습니다. 뒤에 오는 <p>의 들여 쓰기가 감소됩니다.

3 disasters with one template

+0

플로트는 오른쪽에 넣어 종료 옳지 않다되어야한다. –

+0

@KevinBrown 나는 그것을 시도했다, 그것은 들여 쓰기에만 2cm 차이를 만들었다. - 그것은 누락 된 부분을 돌려 보내지 않았고, 가장자리쪽으로 marginalia를 뜨지 않았다. – idjet

+0

템플릿에 ./s/text()가 있고 요소가 없습니다. –

답변

2

글쎄, 당신을 위해하지 대답이 FOP를 사용하고 수레에 대한 매우 제한적인 지원을하고 있기 때문이다. 나는 당신에게 예제를 보여 주었고, 내용으로 약간 확장했고 당신이했던 것처럼 ID를 설정하는 것과 같은 이상한 것을 제거했습니다.

이 XML이 XSL로 처리

<body> 
<p> 
    <title>title here</title> 
    <seg>1 Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     Quisque a orci non mauris convallis imperdiet consequat nec 
     purus. Cras mollis lacus vel lectus facilisis, non 
     hendrerit velit tempor. Phasellus tempor urna vel accumsan 
     dignissim.</seg> 
    <seg>2 note Aliquam porta eu nunc sed laoreet. 
     Sed<add type='margin_gloss'>Some margin note here</add> 
     non nulla consectetur, lobortis tortor ac, 
     placerat nunc. Nulla viverra finibus est nec efficitur. Donec 
     nisi nisl, tincidunt dapibus purus pretium, rhoncus volutpat 
     tortor. Cras fringilla tellus tortor, at 
     ultricies mi cursus at. Nulla facilisi.</seg> 
    <seg>3 Quisque id mi nisl. In in mauris id leo malesuada hendrerit. 
     Orci varius natoque 
     penatibus et magnis dis parturient montes, nascetur ridiculus 
     mus. Nulla sit amet 
     commodo mauris.</seg> 
    <seg>4 Quisque id mi nisl. In in mauris id leo malesuada hendrerit. 
     Orci varius natoque 
     penatibus et magnis dis parturient montes, nascetur ridiculus 
     mus. Nulla sit amet 
     commodo mauris.</seg> 
    <seg>5 Quisque id mi nisl. In in mauris id leo malesuada hendrerit. 
     Orci varius natoque 
     penatibus et magnis dis parturient montes, nascetur ridiculus 
     mus. Nulla sit amet 
     commodo mauris.</seg> 
    <seg>6 note Aliquam porta eu nunc sed laoreet. 
     Sed<add type='margin_gloss'>Some margin note here 2</add> 
     non nulla consectetur, lobortis tortor ac, 
     placerat nunc. Nulla viverra finibus est nec efficitur. Donec 
     nisi nisl, tincidunt dapibus purus pretium, rhoncus volutpat 
     tortor. Cras fringilla tellus tortor, at 
     ultricies mi cursus at. Nulla facilisi.</seg> 
    <seg>7 Quisque id mi nisl. In in mauris id leo malesuada hendrerit. 
     Orci varius natoque 
     penatibus et magnis dis parturient montes, nascetur ridiculus 
     mus. Nulla sit amet 
     commodo mauris.</seg> 
    <seg>8 Quisque id mi nisl. In in mauris id leo malesuada hendrerit. 
     Orci varius natoque 
     penatibus et magnis dis parturient montes, nascetur ridiculus 
     mus. Nulla sit amet 
     commodo mauris.</seg> 
</p> 
</body> 

이 PDF 에서

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" 
version="1.0"> 
<xsl:template match="/"> 
    <fo:root> 
     <fo:layout-master-set> 
      <fo:simple-page-master 
       master-name="page-recto" 
       page-height="29.7cm" page-width="21cm" 
       margin-top="2cm" margin-bottom="2cm" 
       margin-left="2cm" margin-right="1cm"> 
       <fo:region-body 
        region-name="xsl-region-body"/> 
      </fo:simple-page-master> 
     </fo:layout-master-set> 

     <fo:page-sequence master-reference="page-recto"> 
      <fo:flow flow-name="xsl-region-body" 
       font-family="Times" font-weight="normal" 
       font-size="8pt" space-before="8pt" space-after="8pt" 
       text-align="justify" end-indent="120pt"> 
       <xsl:apply-templates/> 
      </fo:flow> 
     </fo:page-sequence> 

    </fo:root> 
</xsl:template> 

<xsl:template match="body/p"> 
    <fo:block 
     page-break-inside="avoid" 
     font-size="9pt" font-weight="bold" 
     padding-bottom="1cm" end-indent="120pt"> 
     <xsl:value-of select="title"/> 
     <xsl:apply-templates/> 
    </fo:block> 
</xsl:template> 

<xsl:template match="add"> 
    <fo:inline font-style="italic"> 
     <xsl:apply-templates/> 
    </fo:inline> 
</xsl:template> 

<xsl:template match="seg"> 
    <fo:block 
     font-family="Times" font-weight="normal" 
     font-size="8pt" space-before="8pt" 
     space-after="8pt" text-align="justify" 
     end-indent="2.5in"> 
     <xsl:if test="descendant::add[@type='margin_gloss']"> 
      <fo:float float="right"> 
       <fo:block-container width="2in" border="1pt solid black" margin="10pt"> 
        <fo:block> 
         <xsl:apply-templates select="add[@type='margin_gloss']"/> 
        </fo:block> 
       </fo:block-container> 
      </fo:float> 
     </xsl:if> 
     <xsl:apply-templates select="text()"/> 
    </fo:block> 
</xsl:template> 
</xsl:stylesheet> 

결과 플로팅 메모 표시 RenderX XEP를 사용하여. Apache FOP 2.1을 사용하면 플로트가있는 단락처럼 완전히 빠져 있습니다. 이 사실은 나에게 FOP가이 플로트를 지원하지 않는다는 것을 나타냅니다. 지원을 요청해야합니다.

enter image description here

+0

감사합니다. 나는이 정도의 의심을 가지고 있으며 지난 주 RenderX를 오랫동안 보았습니다 ...하지만 학업 성적은 제 가격 범위를 벗어났습니다. – idjet

+2

학업 용도는 무료이며 요청을 보내면됩니다. http://www.renderx.com/download/academic.html –

+0

우수. Kevin 대단히 감사합니다. – idjet