1

我正在使用 DITA Open Toolkit 1.7 和 RenderX XEP 将 DITA 映射转换为 PDF。在 DITA 主题中,产品名称是使用 conrefs 插入的。我的一个产品名称很长。在表格中使用时会导致布局问题。因此,我在通过 conref 重用的短语中插入了一个软连字符:

<ph id="PD_FineReader2Comp">DOXiS4 FineReader2&#xad;Components</ph>

这在生成的页面中效果很好,但在书签中会产生一个问题,其中一个符号代替软连字符显示。

在此处输入图像描述

显然,这是一个编码问题。似乎 UTF-8 字符在 PDF 内容中得到了正确处理,但在 PDF 书签中却没有,根据以下来源,可以使用一些 PDF-16 字符(但我不明白哪些字符)。

DITA Open Toolkit 似乎使用以下代码片段从主题标题创建书签:

         <fo:bookmark>
            <xsl:attribute name="internal-destination">
                <xsl:call-template name="generate-toc-id"/>
            </xsl:attribute>
                <xsl:if test="$bookmarkStyle!='EXPANDED'">
                    <xsl:attribute name="starting-state">hide</xsl:attribute>
                </xsl:if>
            <fo:bookmark-title>
                <xsl:value-of select="normalize-space($topicTitle)"/>
            </fo:bookmark-title>
            <xsl:apply-templates mode="bookmark"/>
        </fo:bookmark>

XSL 样式表有 2.0 版。

我想创建一个删除违规字符的覆盖。我怎样才能做到这一点?

  • 是否可以正确解决编码问题?(可能不可能)。
  • 除了空格、制表符、换行符和回车符之外,是否有任何 XSL 函数或属性可以删除空格?
  • 或者我需要对软连字符进行特殊处理吗?
4

2 回答 2

6

小细化:如果您使用的是 XSLT2,将比在此上下文中更有效。在 XSLT2 中,您应该始终更喜欢 xsl:sequence 而不是 xsl:value-of

于 2013-02-13T23:55:56.117 回答
5

执行此操作的简单方法是使用该translate()函数,该函数可用于将某些字符替换为其他字符,或者什么都不替换。看起来这是输出您要修复的值的行:

<xsl:value-of select="normalize-space($topicTitle)"/>

因此,您可以简单地将其修改为:

<xsl:value-of select="translate(normalize-space($topicTitle), '&#xad;', '')"/>

删除所有软连字符。如果您想用空格或普通连字符替换它们,您可以分别执行以下任一操作:

<xsl:value-of select="translate(normalize-space($topicTitle), '&#xad;', ' ')"/>
<xsl:value-of select="translate(normalize-space($topicTitle), '&#xad;', '-')"/>
于 2013-02-13T18:48:52.070 回答