Sus*_*ris 1 xslt pdf-generation xsl-fo dita dita-ot
我正在使用DITA Open Toolkit 1.7和RenderX XEP将DITA映射转换为PDF.在DITA主题中,使用conrefs插入产品名称.我的一个产品名称很长.在表中使用时会导致布局问题.因此,我在通过conref重用的短语中插入了一个软连字符:
<ph id="PD_FineReader2Comp">DOXiS4 FineReader2­Components</ph>
Run Code Online (Sandbox Code Playgroud)
这在生成的页面中很好地工作,但在书签中创建了一个问题,其中显示符号代替软连字符.

显然,这是一个编码问题.似乎在PDF内容中正确处理了UTF-8字符,但在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>
Run Code Online (Sandbox Code Playgroud)
XSL样式表的版本为2.0.
我想创建一个删除违规字符的覆盖.我怎样才能做到这一点?
执行此操作的简单方法是使用该translate()函数,该函数可用于将某些字符替换为其他字符,或者不使用任何字符.看起来这是输出您要修复的值的行:
<xsl:value-of select="normalize-space($topicTitle)"/>
Run Code Online (Sandbox Code Playgroud)
所以你可以简单地将其修改为:
<xsl:value-of select="translate(normalize-space($topicTitle), '­', '')"/>
Run Code Online (Sandbox Code Playgroud)
删除所有软连字符.如果您想用空格或普通连字符替换它们,您可以分别执行以下任一操作:
<xsl:value-of select="translate(normalize-space($topicTitle), '­', ' ')"/>
<xsl:value-of select="translate(normalize-space($topicTitle), '­', '-')"/>
Run Code Online (Sandbox Code Playgroud)