我正在使用DITA Open Toolkit 1.7和RenderX XEP将DITA地图转换为PDF。在DITA主题中,使用conrefs插入产品名称。我的一个产品名称很长。在表中使用时会导致布局问题。因此,我在通过conref:
重用的短语中插入了一个软连字符<ph id="PD_FineReader2Comp">DOXiS4 FineReader2­Components</ph>
这在生成的页面中很有效,但在书签中创建了一个问题,其中显示符号代替软连字符。
显然,这是编码问题。似乎在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>
XSL样式表的版本为2.0。
我想创建一个删除违规字符的覆盖。我怎么能这样做?
答案 0 :(得分:6)
小改进:如果您使用XSLT2,将比在此上下文中更有效。在XSLT2中,您应该始终更喜欢xsl:sequence over xsl:value-of
答案 1 :(得分:5)
执行此操作的简单方法是使用translate()
函数,该函数可用于将某些字符替换为其他字符,或者不使用任何字符。看起来这是输出您想要修复的值的行:
<xsl:value-of select="normalize-space($topicTitle)"/>
所以你可以简单地将其修改为:
<xsl:value-of select="translate(normalize-space($topicTitle), '­', '')"/>
删除所有软连字符。如果您想用空格或普通连字符替换它们,您可以分别执行以下任一操作:
<xsl:value-of select="translate(normalize-space($topicTitle), '­', ' ')"/>
<xsl:value-of select="translate(normalize-space($topicTitle), '­', '-')"/>