2012-01-04 64 views
0

的TFF文件中的代码如下:为什么扔java.awt.FontFormatException,不过,我可以打开Windows

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 2013-11-04 14:38:10

+1

..我通过从网上下载TTF文件解决了这个问题。我想OSX的foo.TTF与Windows的foo.TTF不一样。但是,通过将所有嵌入的字体替换为下载的字体,我终于解决了我的问题。 – davidcyp 2013-11-04 15:15:22

回答

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(); 
       } 
      } 
     } 
    } 
} 

你应该能够运行的时间不定数量没有失败,如果是这样,那么你可能要有所调整你的代码 - 关闭/打开的您的输入流叠加看起来有点可疑。我这样说并没有看到你在声明那些实例变量的地方,以及其他什么代码可能会操纵它们。

相关问题