2012-04-02 54 views
1

到目前爲止我所遇到的是我能想到Oracle的Java字體渲染庫中的「bug」。在某些字體(如PDF文件中嵌入的字體)中,使用了一些不規則的字符代碼,並且它們具有與它們相關聯的字形。在Java中渲染字體:java.awt.Font的行爲不正確

在這種情況下(屬於製表符,回車符和換行符的字符代碼9,10和13)嘗試使用java.awt.Font.createGlyphVector方法獲得字形矢量時,不會返回正確的字形,但它適用於其他所有內容。

我跟蹤這個問題在Java CMAP的實現,有一個類似的代碼:

  char getGlyph(int charCode) { 
      if (charCode < 256) { 
       if (charCode < 0x0010) { 
        switch (charCode) { 
        case 0x0009: 
        case 0x000a: 
        case 0x000d: return CharToGlyphMapper.INVISIBLE_GLYPH_ID; 
        } 
       } 
       return (char)(0xff & cmap[charCode]); 
      } else { 
       return 0; 
      } 
     } 

所以,我的問題是:

  • 實際上是這一個錯誤?
  • 有誰知道如何解決這個問題?
  • 有沒有辦法從真正的字體中提取CMAP數據,以便我可以將字符(代碼點)映射到字形代碼?

回答

0

我相信你現在已經發現了這個問題,但對於那些未來偶然發現的人,我會推薦sfntly library。這是一個由谷歌免費的Java庫,允許您編輯基於sfnt的字體,非常容易使用。如果您以另一種方式解決了您的問題,請通過更新指導我們。謝謝。