Swing - 如何将自定义字体添加到JTextArea?

3

我的工具基本上是读取PDF并在JTextArea中打印出PDF的内容。一切都很好,直到我的PDF包含阿拉伯语的PH Mirjan字体。如下图所示,我的文本区域显示了一些垃圾字符。

enter image description here

我该怎么解决这个问题?

我的文本区域的默认字体是Arial Unicode MS。有没有办法配置文本区域的字体呢?比如说,如果我在本地下载了PH Mirjan,如何将文本区域字体更改为下载的字体?非常感谢任何建议或参考链接。

编辑

try (InputStream is = NewJFrame.class.getResourceAsStream("/GE SS Two Bold.otf")) 
        {
            Font font = Font.createFont(Font.TRUETYPE_FONT, is);
            font = font.deriveFont(Font.PLAIN, 24f);
            jTextArea1.setFont(font);
            jTextArea1.setForeground(Color.BLUE);

我遇到了这个异常:

Exception

java.awt.FontFormatException: java.nio.BufferUnderflowException at sun.font.TrueTypeFont.init(TrueTypeFont.java:558) at sun.font.TrueTypeFont.(TrueTypeFont.java:191) at sun.font.CFontManager.createFont2D(CFontManager.java:161) at java.awt.Font.(Font.java:614) at java.awt.Font.createFont0(Font.java:968) at java.awt.Font.createFont(Font.java:876)

你知道为什么会出现这个异常吗?


1
JTextArea#setFont,但你需要使用类似 Font.createFont 的方法先加载它(假设它没有被加载到操作系统的系统字体中),否则你应该能够通过名称创建它。例如 exampleexample - MadProgrammer
1
示例 - MadProgrammer
1
希望这个另一个例子也能帮助你的良好努力 :-) - nIcE cOw
2
..或者示例示例。我非常确定这是某个确切问题的重复。 - Andrew Thompson
1个回答

1
为什么字体名称是.tt而不是.ttf? 可能情况是它不是ttf文件或者损坏了,导致异常发生。
    try {
        Font NARROW = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getResourceAsStream("/fonts/DSS.ttf"));   
        NARROW = NARROW.deriveFont(17f);       
    } catch (FontFormatException | IOException ex) {
        System.err.println("Exception loading fonts "+ex);
    }

我知道这几乎是相同的代码,尝试在其他ttf文件上使用。 异常不应该出现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接