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
中的文本将显示在一行中。
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()
:
我想停止将生成的单词分成两行。现在我尝试使用 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
中的文本将显示在一行中。
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()
: