你好,我在将html转换成pdf的时候,设置了自定义字体目录,但是发现有些用户生效,有些用户电脑并不生效,这是为何?FontSettings.getDefaultInstance().setFontsFolder("D://fonts/zh”, false);
@yyl5201314, 请在出现字体问题的计算机上运行以下代码,查看是否打印任何字体替换警告。 字体替换警告意味着仍然缺少一些字体。
FontSettings.getDefaultInstance().setFontsFolder("D://fonts/zh", false);
Document doc = new Document("in.html");
HandleDocumentWarnings warningsHandler = new HandleDocumentWarnings();
doc.setWarningCallback(warningsHandler);
doc.save("out.pdf");
warningsHandler.printMissingFontDetails();
public static class HandleDocumentWarnings implements IWarningCallback {
public ArrayList listOfFonts = new ArrayList();
public void warning(WarningInfo info) {
if (info.getWarningType() == WarningType.FONT_SUBSTITUTION) {
if (!listOfFonts.contains(info.getDescription()))
listOfFonts.add(info.getDescription());
}
}
public void printMissingFontDetails() {
for (int i = 0; i < listOfFonts.size(); i++)
System.out.println(listOfFonts.get(i).toString());
}
}
你好,我运行了以后打印这些告警:Font ‘Times New Roman’ has not been found. Using ‘FZLanTingHeiS-R-GB’ font instead. Reason: first available font.
Font ‘Symbol’ has not been found. Using ‘FZLanTingHeiS-R-GB’ font instead. Reason: first available font.但是我查看了我的计算机是安装了Times New Roman字体的,请问是怎么回事呢?
@yyl5201314, 这意味着该文档使用 Times New Roman 和 Symbol 字体,但 Aspose.Words 找不到这些字体。
调用 FontSettings.getDefaultInstance().setFontsFolder(“D://fonts/zh”, false) 后,Aspose.Words 开始查找 D:\fonts\zh 文件夹中的所有字体。 该文件夹很可能不包含 Times New Roman 和 Symbol,这就是 Aspose.Words 用该文件夹中可用的字体替换它们的原因。
您有 2 个选项来修复它:
- 将 Times New Roman 和 Symbol 字体复制到 D:\fonts\zh 文件夹
- 使用系统中安装的Times New Roman 和Symbol(在C:\Windows\Fonts 文件夹中)。 在这种情况下,您可以将系统字体和 D:/fonts/zh 文件夹中的字体结合起来:
FontSettings.getDefaultInstance().setFontsSources(
new FontSourceBase[] {
new SystemFontSource(),
new FolderFontSource("D:\\fonts\\zh", true)
}
);
您可以在我们的文档中阅读有关如何指定不同字体源的更多信息:
https://docs.aspose.com/words/java/specify-truetype-fonts-location/#loading-fonts-from-system