1

DITA OpenToolkit1.7とRenderXXEPを使用してDITAマップをPDFに変換しています。DITAトピックでは、製品名はconrefsを使用して挿入されます。私の製品名の1つはかなり長いです。テーブル内で使用すると、レイアウトの問題が発生しました。したがって、conrefを介して再利用されるフレーズにソフトハイフンを挿入しました。

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

これは生成されたページではうまく機能しますが、ソフトハイフンの代わりに記号が表示されるブックマークで問題が発生します。

ここに画像の説明を入力してください

明らかに、これはエンコーディングの問題です。UTF-8文字はPDFコンテンツでは適切に処理されているようですが、以下のソースによると、一部のPDF-16文字を使用できるPDFブックマークでは処理されていません(ただし、どれを使用できるかわかりませんでした)。

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:value-ofよりもxsl:sequenceを優先する必要があります。

于 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 に答える