2012-01-04 7 views
0

でTFFファイルを開くことができます。このコードは常に動作していないは、しかし、私は、コードは以下の通りです窓

Font getFont(String fontPath) throws IOException, FontFormatException { 
     fis = new FileInputStream(fontPath); 
     bis = new java.io.BufferedInputStream(fis); 
     Font tmp = null; 
     try { 
      tmp = Font.createFont(Font.TRUETYPE_FONT, bis); 
     } catch (FontFormatException e) { 
      e.printStackTrace(); 
      bis.close(); 
      fis = new FileInputStream(fontPath); 
      bis = new java.io.BufferedInputStream(fis); 
      tmp = Font.createFont(Font.TYPE1_FONT, bis); 
     } 

     return tmp.deriveFont(96.0f); 
    } 

!!!。
それが最初のスローされますなぜ

...それは、いくつかのフォントファイルのためのjava.awt.FontFormatExceptionがスローされますが、そのフォントファイルは、Windowsで正しく開くことができます: java.awt.FontFormatException:フォントの名前が見つかりませんその後、

とスロー: java.awt.FontFormatException:悪いPFAフォント

+0

私は全く同じ問題があります。私は、TTFファイルが一時ファイルに書き込まれていることを理解しました。このファイルは処理され、このプロパティはTrueTypeFontインスタンスに設定されていないため、FontFormatException(フォント名が見つかりません)例外がスローされます。私はtmpフォントファイルのメタデータを検証しており、このファイルには必要なメタデータが含まれているので、これは奇妙なことです。 – davidcyp

+1

..そして、ウェブからTTFファイルをダウンロードすることで問題を解決しました。私は、foo.TTF for OSXはfoo.TTF for Windowsと同じではないと思います。しかし、埋め込まれたすべてのフォントをダウンロードしたフォントに置き換えることによって、私は最終的に問題を解決しました。 – davidcyp

答えて

0

は、お使いのコンピュータでこれを実行してみてください。 rootPathをフォントのパスに置き換えます。

public class FontLoader { 
    public static void main(String[] args) { 
     String rootPath = "/Library/Fonts"; 

     File root = new File(rootPath); 
     if (root.canRead()) { 
      String[] fontFiles = root.list(); 

      Font font = null; 
      for (String fontFile : fontFiles) { 
       try { 
        System.out.println(fontFile); 
        font = Font.createFont(Font.TRUETYPE_FONT, new File(root 
          + "/" + fontFile)); 
        System.out.println(font); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

あなたは必ず不定回数を実行することができる必要があり、そうであれば、あなたは、多少自分のコードを再構築することができます - あなたの入力のオープン/クローズの積み重ねはやや疑わしいストリーム。私はあなたがそれらのインスタンス変数を宣言している場所と他のどのコードがそれらを操作しているのかを見ずにこれを言う。

関連する問題