Я конвертирую карты DITA в PDF, используя DITA Open Toolkit 1.7 и RenderX XEP. В темах DITA названия продуктов вставляются с помощью conrefs. Одно из названий моих продуктов довольно длинное. Это вызывало проблемы с макетом при использовании внутри таблиц. Поэтому я вставил мягкий дефис во фразу, которая повторно используется через conref:
<ph id="PD_FineReader2Comp">DOXiS4 FineReader2­Components</ph>
Это хорошо работает на сгенерированных страницах, но создает проблему в закладках, где вместо мягкого дефиса отображается символ.
Очевидно, это проблема кодировки. Кажется, что символы UTF-8 правильно обрабатываются в содержимом PDF, но не в закладках PDF, где, согласно следующим источникам, могут использоваться некоторые символы PDF-16 (но я не понял, какие именно).
- http://partners.adobe.com/public/developer/en/pdf/PDFReference.pdf
- http://www.setasign.de/support/tips-and-tricks/use-unicode-in-string-values/
Похоже, что 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, которые удаляют пробелы, кроме пробела, табуляции, перевода строки и возврата каретки?
- Или мне нужна особая обработка мягкого дефиса?