2013-02-13 26 views
1

我使用DITA Open Toolkit 1.7和RenderX XEP將DITA映射轉換爲PDF。在DITA主題中,使用conrefs插入產品名稱。我的一個產品名稱很長。它在表格中使用時會導致佈局問題。因此,我插入軟連字符成通過conref重用短語:如何從使用XSL-FO生成的PDF書籤中去除Unicode軟連字符

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

這很好地工作在生成的頁面,而造成在一個符號顯示在地方軟連字符的書籤時出現問題。

enter image description here

顯然,這是一種編碼的問題。看起來,UTF-8字符在PDF內容中可以正確處理,但在PDF書籤中卻沒有,根據以下來源,可以使用一些PDF-16字符(但我不明白哪些字符)。

的DITA開放工具包似乎產生了使用此代碼片段從主題標題書籤:

  <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函數或屬性?
  • 或者我需要對軟連字符進行特殊處理嗎?

回答

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;', '-')"/> 
+0

謝謝您的建議。它的工作和解決眼前的問題。 – 2013-02-13 19:37:24

6

小細化:如果您正在使用XSLT2,會比在這方面更有效率。在XSLT2中,您應該始終更喜歡使用xsl:value的序列:

+0

感謝您的提示 - 測試和工作。我剛剛收到Michael Kay關於XSLT的書,並閱讀了這個... – 2013-02-14 11:20:23

相關問題