我用Java编写了一个程序,它使用一种特殊的字体,默认情况下在任何操作系统上都不存在.
在Java中是否可以将这种特殊字体添加到操作系统中?例如,在Windows中,将此字体复制到特殊的Fonts文件夹.
如果有可能,怎么样?
我尝试将文本渲染到 BufferedImage,效果非常好,但我无法渲染任何非 ASCII 字符(至少据我所知)。我所能找到的只是因为字体的原因,所以我下载了谷歌的“Noto”字体,它似乎支持几乎所有脚本,但我仍然得到了这些框。
\n\n我什至不想渲染一些特别异国情调的东西。仅德语变音符号和升号 s (\xc3\x84\xc3\xa4 \xc3\x96\xc3\xb6 \xc3\x9c\xc3\xbc \xc3\x9f)。
\n\n我创建这样的字体
\n\nFont font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("NotoSans-Regular.ttf")).deriveFont(12f);\nRun Code Online (Sandbox Code Playgroud)\n\n并像这样渲染整个事情
\n\nGraphics2D g2 = image.createGraphics();\ng2.setFont(font);\ng2.setColor(Color.white);\ng2.drawString(string, 0, g2.getFontMetrics().getAscent());\ng2.dispose();\nRun Code Online (Sandbox Code Playgroud)\n\n它适用于 ASCII。
\n\n谷歌要么引导我找到非常简单的教程(这实际上是我目前得到的代码),要么说问题出在字体上,但事实并非如此,因为它在编辑器中运行得很好。
\n\n谢谢
\n\n编辑1:这是我的完整代码
\n\nimport javax.imageio.ImageIO;\nimport java.awt.*;\nimport java.awt.font.FontRenderContext;\nimport java.awt.geom.Rectangle2D;\nimport java.awt.image.BufferedImage;\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\n\npublic class Test {\n public static void main(String[] args) throws IOException, FontFormatException {\n String string = "\xc3\x84\xc3\xa4\xc3\x96\xc3\xb6\xc3\x9c\xc3\xbc\xc3\x9f";\n BufferedImage image;\n\n Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("NotoSans-Regular.ttf")).deriveFont(50f);\n Rectangle2D rec = font.getStringBounds(string, new FontRenderContext(null, false, …Run Code Online (Sandbox Code Playgroud)