Java版本:aspose-words-21.5.0-jdk17.jar字体问题

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");

请参阅我们的文档了解更多详细信息: