我正在研究一个Java程序,它检查XML文件中是否有某种字体没有字形表示的字符(Font.canDisplay()
)
默认情况下,XML文件应该是utf-8编码的。在canDisplay
检查XML代码中的实体之前,它们将被解析并转换为char / int值。
为了提供灵活性,程序接受两个参数:
我想检查系统上是否存在指定的字体,因为否则使用canDisplay
没有多大意义。
据我所知,Java 6支持OTF字体。但是,当我使用java.awt。*中的getAvailableFontFamilyNames()
时,它显然只列出了TTF字体。
我想知道是否有办法检查OTF字体(由它的名字给出)是否存在。一般来说,如果在Windows上使用Java中的OTF字体是实用的。
目的:我们使用renderX的XEP将xsl-fo转换为PDF。我希望能够检测xsl-fo文件是否包含不能用某种字体显示的字符。 XEP没有发出警告,只打印空格而不是字形。更糟糕的是它似乎混淆了他对正确文本的间距计算,因此具有这些空白空格的行比当前对齐的块大小更长或更短。
我知道有一些警告,例如我必须检查字符是以常规,斜体还是粗体显示,然后检查该特定字体中的字形。但是现在有一个更通用的方法来检查常规字体中是否存在字符的字形就足够了。
答案 0 :(得分:0)
我也得到了.OTF字体。
GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
for (String ffname : genv.getAvailableFontFamilyNames()) {
System.out.println(ffname);
}
因此,特定字体文件有问题,字体名称与文件名不同,或者必须将一个Locale参数添加到getLocalGraphicsEnvironment。
对于带有变音符号的拉丁字符,用于检索基本字母代码+变音符号组合代码的unicode规范化(java文本)可能会有所帮助。类似的东西:
java.text.Normalizer.normalize(letter, java.text.Normalizer.Form.NFKD).replaceAll("\\p{M}", "");