没有 space 的换行符和 fop 2.2 但保留 white-space="pre" 来管理用户手动缩进的文本
Line-break without space with fop 2.2 but keeping white-space="pre" to manage user manually indented text
我正在尝试在 Fop 2.2 中管理文本中的白色 space 处理。
文本区域包括长句和手动缩进的文本。
linefeed-treatment="preserve"
允许在 pdf 页面末尾有一个正确的换行符并保留白行。这很棒。
问题是我必须允许用户包含手动缩进的文本并正确管理它。这是一个例子:
- Test 1
___1.1. Test 2
___1.2. Test 3
______1.2.1. Test 4
___1.3. Test 5
- Test 6
为了保留缩进文本,我必须使用 white-space="pre"
,效果很好。
但是,white-space="pre"
的问题是在换行之后,我在下一行的开头有一个 space。
我正在尝试找到一种解决方案来处理这两种情况,但我找不到任何解决方案。
编辑:关于此的更多信息。
实际上,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,这是不正确的: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>
按照@TonyGraham 的建议,我对文本区域进行了解析,因此我能够逐行处理。这是我使用的代码:
<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>
我正在尝试在 Fop 2.2 中管理文本中的白色 space 处理。
文本区域包括长句和手动缩进的文本。
linefeed-treatment="preserve"
允许在 pdf 页面末尾有一个正确的换行符并保留白行。这很棒。
问题是我必须允许用户包含手动缩进的文本并正确管理它。这是一个例子:
- Test 1
___1.1. Test 2
___1.2. Test 3
______1.2.1. Test 4
___1.3. Test 5
- Test 6
为了保留缩进文本,我必须使用 white-space="pre"
,效果很好。
但是,white-space="pre"
的问题是在换行之后,我在下一行的开头有一个 space。
我正在尝试找到一种解决方案来处理这两种情况,但我找不到任何解决方案。
编辑:关于此的更多信息。
实际上,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,这是不正确的: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>
按照@TonyGraham 的建议,我对文本区域进行了解析,因此我能够逐行处理。这是我使用的代码:
<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>