我正在尝试在Fop 2.2的文本中管理空格处理。
文本区域包括长句子和手动缩进的文本。
linefeed-treatment="preserve"
允许在pdf页面末尾使用正确的换行符,并保留白线。太好了
问题是我必须允许用户包括手动缩进的文本并正确地对其进行管理。这是一个示例:
- 测试1
___ 1.1。测试2
___ 1.2。测试3
______ 1.2.1。测试4
___ 1.3。测试5
- 测试6
为了保留缩进的文本,我必须使用效果很好的white-space="pre"
。
但是,white-space="pre"
的问题在于,在换行符之后,我在下一行的开头有一个空格。
我正在尝试找到一种可以同时管理两种情况的解决方案,但我找不到任何解决方法。
编辑:有关此的更多信息。
实际上,xml是从应用程序生成的,用户可以在其中填充多行文本区域。每个文本区域都可以包含长句子和缩进文本。一个文本区域的所有内容都是一个标签。这就是为什么变得更加困难的原因,因为我必须将两种可能性都管理在一个fo:block
中这是应用程序生成的XML标记:
<TXT_TEST newline="1" title="0" style="txtArea" label="" unformattedLabel="" isModified="0" toPrint="1" indentation="0" xmlStyle="" nextField="">Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé.
Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé.
Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé. Ceci est une zone de texte longue avec passage à la ligne forcé.
Et voici une indentation forcée :
1. Test
1.1. Test
1.1.1. Test
1.1.2. Test
1.1.3. Test
1.2. Test
1.2.1. Test
2. Test
3. Test</TXT_TEST>
但这是我现在得到的结果的链接,这是不正确的:link
这是我在xsl中拥有的fo块:
<fo:block linefeed-treatment="preserve" white-space="pre" wrap-option="wrap" font-family="Helvetica" font-size="11pt">
<xsl:value-of select="TXT_TEST/text()"/>
</fo:block>
答案 0 :(得分:0)
根据@TonyGraham的建议,我对textarea进行了解析,因此能够逐行处理。这是我使用的代码:
<xsl:template name="split-textarea">
<xsl:param name="texta" />
<xsl:choose >
<xsl:when test="contains($texta,'
')">
<xsl:variable name="textbefore" select="substring-before($texta,'
')" />
<xsl:variable name="textafter" select="substring-after($texta,'
')"/>
<xsl:choose>
<xsl:when test="starts-with($textbefore, ' ')">
<fo:block wrap-option="wrap" white-space="pre" font-family="Helvetica" font-size="11pt">
<xsl:value-of select="$textbefore" />
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block wrap-option="wrap" font-family="Helvetica" font-size="11pt">
<xsl:choose>
<xsl:when test="$textbefore != ''">
<xsl:value-of select="$textbefore" />
</xsl:when>
<xsl:otherwise>
<fo:block> </fo:block>
</xsl:otherwise>
</xsl:choose>
</fo:block>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="split-textarea">
<xsl:with-param name="texta" select="$textafter" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<fo:block font-family="Helvetica" font-size="11pt">
<xsl:value-of select="$texta" />
</fo:block>
<fo:block> </fo:block>
</xsl:otherwise>
</xsl:choose>
</xsl:template>