Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:使用OTF字体,检查是否存在特定字体_Java_Fonts_Opentype - Fatal编程技术网

Java:使用OTF字体,检查是否存在特定字体

Java:使用OTF字体,检查是否存在特定字体,java,fonts,opentype,Java,Fonts,Opentype,我正在开发一个Java程序,该程序检查XML文件中某些字体中没有字形表示的字符(使用font.canDisplay()) 默认情况下,XML文件应为utf-8编码。XML代码中的实体被解析并转换为char/int值,然后由canDisplay检查 为了提供灵活性,程序接受两个参数: XML文件的文件名 字体名称 我想检查系统上是否存在指定的字体,否则使用canDisplay没有多大意义 据我所知,Java6支持OTF字体。但是,当我使用java.awt.*中的getAvailableFont

我正在开发一个Java程序,该程序检查XML文件中某些字体中没有字形表示的字符(使用
font.canDisplay()

默认情况下,XML文件应为utf-8编码。XML代码中的实体被解析并转换为char/int值,然后由
canDisplay
检查

为了提供灵活性,程序接受两个参数:

  • XML文件的文件名
  • 字体名称
我想检查系统上是否存在指定的字体,否则使用
canDisplay
没有多大意义

据我所知,Java6支持OTF字体。但是,当我使用java.awt.*中的
getAvailableFontFamilyNames()
时,它显然只列出TTF字体

我想知道是否有办法检查OTF字体(以其名称命名)是否存在。一般来说,如果在windows上使用Java中的OTF字体是可行的

其目的是:我们使用renderX的XEP将xsl-fo转换为pdf。我希望能够检测xsl fo文件是否包含某些字体无法显示的字符。XEP并没有给出警告,只是打印空的空格而不是字形。更糟糕的是,这似乎混淆了他对对齐文本间距的计算,因此带有这些空格的行比当前对齐块大小长或短


我知道存在某些警告,例如,我必须检查字符是否显示为常规、斜体或粗体,然后检查特定字体中的字形。但现在,一种更为通用的方法检查字符的字形是否存在于常规字体中就足够了。

我也得到了.OTF字体

    GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
    for (String ffname : genv.getAvailableFontFamilyNames()) {
        System.out.println(ffname);
    }
因此,要么特定字体文件有问题,要么字体名称与文件名不同,要么必须向getLocalGraphicsEnvironment添加区域设置参数

对于带变音符号的拉丁字符,使用unicode规范化(java文本)检索基本字母代码+变音符号组合代码可能会有所帮助。比如:

java.text.Normalizer.normalize(letter, java.text.Normalizer.Form.NFKD).replaceAll("\\p{M}", "");

我也有.OTF字体

    GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
    for (String ffname : genv.getAvailableFontFamilyNames()) {
        System.out.println(ffname);
    }
因此,要么特定字体文件有问题,要么字体名称与文件名不同,要么必须向getLocalGraphicsEnvironment添加区域设置参数

对于带变音符号的拉丁字符,使用unicode规范化(java文本)检索基本字母代码+变音符号组合代码可能会有所帮助。比如:

java.text.Normalizer.normalize(letter, java.text.Normalizer.Form.NFKD).replaceAll("\\p{M}", "");