更新时间:2023-12-04 13:57:58
我认为您的 XSLT 存在一些问题:
I think there are a few issues with your XSLT:
xsl:text
元素中,因为这些文本节点不仅仅由空白字符组成,因此永远不会被剥离(请参阅空白剥离了解更多详情)xsl:preserve-space
和 xsl:strip-space
,除非当然您出于其他原因需要它们linefeed-treatment
属性:linefeed-treatment="preserve"


实体,因此在您的输入中,您在静态"和文本"之间有 3 个换行,这将保存时产生两个空行;如果这不是您想要的,您必须删除其中一些
fo:block
元素中,因此这意味着它们将始终位于不同的行上;如果你想让它们一个挨着一个放置,那些词必须在 fo:inline
元素 内(并且必须有一个外部的 fo:block
包含它们)xsl:text
elements, as those text nodes are not composed only of whitespace characters and therefore will never be stripped (see Whitespace stripping for more details) xsl:preserve-space
and xsl:strip-space
, unless of course you need them for other reasonslinefeed-treatment
property: linefeed-treatment="preserve"


entity, so in your input you have 3 linefeeds between "Static" and "text", which will produce two empty lines when preserved; if that's not what you want, you have to remove some of them
fo:block
elements, so this means they will always be on different lines; if you want them to be placed one beside the other, those words must be inside fo:inline
elements instead (and there must be an outer fo:block
to contain them)在查看 FO 文件时保留的换行符和被忽略的换行符之间的区别并不是很明显,因为它归结为换行处理
的存在祖先元素中的属性(可能离文本节点本身很远).
While looking at an FO file the difference between a preserved linefeed and an ignored one is not immediately apparent, as it boils down to the presence of the linefeed-treatment
attribute in an ancestor element (which could be quite far from the text node itself).
在特定位置强制换行的更清晰方法包括:
Clearer ways to force a line break in a specific position include:
fo:block
元素,每个元素都包含应该创建一行(或几行)的文本fo:block
elements, each one containing the text that should create a line (or several ones) <fo:block>Static</fo:block>
<fo:block>text <fo:inline font-weight="bold">bold.</fo:inline></fo:block>
fo:block
来换行 <fo:block>
Static
<fo:block/>
text <fo:inline font-weight="bold">bold.</fo:inline>
</fo:block>