簡體   English   中英

xsl:fo不要將單詞分成兩行

[英]xsl:fo don't split word into 2 lines

我想停止將生成的單詞分為兩行。 現在,我嘗試使用wrap-option =“ wrap”,但沒有任何效果。 我希望有人能幫助我;)

我使用Saxon-HE,xslt 2.0

我的xml文件:

<root>
     <out>
          invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. 
          <build>
               <name>John</name>
               <year>29</year>
               <address>London</address>
               <code>12345678902331234313123123123123123123</code>
          </build>At vero eos et    
     </out>
</root>

我的xslt文件:

 <xsl:template match="out">
        <fo:block>
               <xsl:apply-templates/>
        </fo:block>
    </xsl:template>

    <xsl:template match="build">
        <fo:inline wrap-option="wrap" color="Red">
            <xsl:value-of select="concat(./name,'-',./year,'-',./address,'+',./code)"/>
        </fo:inline>
    </xsl:template>

我的預期輸出如下:

Invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua
John-29-London+11231231231...

輸出與我的解決方案:

Invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua John-29
-London+123123..

如果這些是樣式表中唯一的模板,則文本節點將由內置模板處理。 您不應以這種不受控制的方式輸出文本。 如果您添加一個匹配text()的空模板(正如我已經告訴您的 ),則build中的文本build顯示在一行上。

XSLT樣式表

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
   xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />

    <xsl:template match="/root">
      <fo:root>
        <fo:layout-master-set>
          <fo:simple-page-master master-name="page"
            page-height="297mm" page-width="210mm"
            margin-top="20mm" margin-bottom="10mm"
            margin-left="25mm" margin-right="25mm">
            <fo:region-body
              margin-top="0mm" margin-bottom="15mm"
              margin-left="0mm" margin-right="0mm"/>
            <fo:region-after extent="10mm"/>
          </fo:simple-page-master>
        </fo:layout-master-set>
        <fo:page-sequence master-reference="page">
          <fo:flow flow-name="xsl-region-body">
            <xsl:apply-templates/>
          </fo:flow>
        </fo:page-sequence>
        </fo:root>
    </xsl:template>

    <xsl:template match="out">
        <fo:block>
               <xsl:apply-templates/>
        </fo:block>
    </xsl:template>

    <xsl:template match="build">
        <fo:inline wrap-option="wrap" color="Red">
            <xsl:value-of select="concat(name,'-',year,'-',address,'+',code)"/>
        </fo:inline>
    </xsl:template>

    <xsl:template match="text()"/>
</xsl:transform>

XSL-FO輸出

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
   <fo:layout-master-set>
      <fo:simple-page-master master-name="page"
                             page-height="297mm"
                             page-width="210mm"
                             margin-top="20mm"
                             margin-bottom="10mm"
                             margin-left="25mm"
                             margin-right="25mm">
         <fo:region-body margin-top="0mm"
                         margin-bottom="15mm"
                         margin-left="0mm"
                         margin-right="0mm"/>
         <fo:region-after extent="10mm"/>
      </fo:simple-page-master>
   </fo:layout-master-set>
   <fo:page-sequence master-reference="page">
      <fo:flow flow-name="xsl-region-body">
         <fo:block>
            <fo:inline wrap-option="wrap" color="Red">John-29-London+12345678902331234313123123123123123123</fo:inline>
         </fo:block>
      </fo:flow>
   </fo:page-sequence>
</fo:root>

渲染的PDF輸出

在此處輸入圖片說明


但是真正的問題是,如果文本實際上長於一行,例如,如果輸入看起來像

<code>123456789023312343131231231248364387438463846837483643123123123</code>

然后,放置keep保管箱即可達到您想要的目標:

<xsl:template match="build">
    <fo:inline keep-together.within-line="always" color="Red">
        <xsl:value-of select="concat(./name,'-',./year,'-',./address,'+',./code)"/>
    </fo:inline>
</xsl:template>

然后文本行只會溢出頁面邊框

在此處輸入圖片說明

最后是keep-together ,但沒有匹配text()的模板:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM