Java版本:aspose-words-21.5.0-jdk17.jar,Doc1.docx (1.8 MB)
word内容插入汉字(使用的文鼎大颜楷或华文行楷),应用服务器系统没有安装过该字体,通过如下代码转pdf文档后中文没有乱码,**请问具体是什么原因?**PDF文档中文显示字体样式不是对应字体(文鼎大颜楷或华文行楷),像显示成了某种固定字体样式。详见文档附件
@SalesDhorde, 当 Word 文档中指定的字体丢失时,Aspose.Words 会尝试用另一种字体替换它。 请参阅我们有关 Aspose.Words 如何替换字体 的文档。
如果运行以下代码,您应该会看到有关替换字体的警告消息:
Document doc = new Document("input.docx");
doc.setWarningCallback(new IWarningCallback() {
@Override
public void warning(WarningInfo warningInfo) {
if (WarningType.FONT_SUBSTITUTION == warningInfo.getWarningType()) {
System.out.println(warningInfo.getDescription());
}
}
});
doc.save("out.pdf");
如果您不希望进行字体替换,则需要在进行 PDF 转换的计算机上安装缺少的字体,或者指定缺少的字体所在的位置。 请参阅我们的文档了解更多详细信息:
如图文鼎大颜楷字体没有安装时会被替换成MS Gothic字体显示,1、换个环境是否也会替换成MS Gothic 字体? 2、 如何让环境转PDF中文找不到字体时乱码显示,而不是被替换的成别的字体?微信图片_20230803142600.png (1.5 KB)
@SalesDhorde, 为了更好地理解,请运行以下代码来获取包含字体替换规则的XML文件:
FontSettings fontSettings = FontSettings.getDefaultInstance();
fontSettings.getFallbackSettings().save("Current_FallbackTable.xml");
在 Current_FallbackTable.xml 中您可以找到以下规则:
<Rule Ranges="4E00-9FFF" FallbackFonts="SimSun、微软雅黑、MS Gothic" />
正如你所看到的,这条规则指定了汉字Unicode块(U+4E00-U+9FFF)的字体
如果您在 XML 文件中注释或删除此规则,并在转换前再次加载修改后的 XML 文件(如下面的代码所示),则如果未安装 Word 文档中指定的字体,则汉字将呈现为方框:
FontSettings fontSettings = FontSettings.getDefaultInstance();
fontSettings.getFallbackSettings().load("Modified_Current_FallbackTable.xml");
Document doc = new Document("in.docx");
doc.save("out.pdf");
请参阅我们的文档了解更多详细信息: