2017-12-21 36 views
3

私は大きな中世の原稿をXMLに転記しました(TEIスキーマを使用しています)。私はxsl:foとApache FOPを使ってPDFを処理しています。ファイルは、以下に示すようにネストした<body>,<p>,<seg>を使用して構成されています。場合によっては、余白には<add>が使用されます。XSL:余白を表示するためのFOフロート - 文書を破る

<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> Sを使用して一つのマスター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> 

Successful sample

を私は右をインデントしましたマージンノートのためのスペースを確保するためにサイド(端)に配置します。たとえば、最初の<p>の4番目の<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は4番目のセグメントの横に表示されるはずですが、その代わりに、次の<p>とマージされます。第4の<seg>は姿を消した。次の<p>のインデントが減少します。

3 disasters with one template

+0

フロートは、右に置くのが適切ではないはずです。 –

+0

@KevinBrown私はそれを試しました、それはインデントにのみ2 cmの違いを作った - それは行方不明のセグメントを返していないか、余白に向かって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

関連する問題