Aspose 转换word为pdf的时候,针对于mathtype的数学公式,会有乱码的情况出现

我用的 ASPOSE.WORD for JAVA 22.12
aspose 转换word为pdf的时候,针对于mathtype的数学公式,会有乱码的情况出现、window环境上转换是正常的,但是Linux环境不行,找相关资料说是Linux缺少对应的字体。但是服务器上安装好用到的字体后还是有这个问题,用的代码是:Document document = new Document(“xxx.docx”);
document.save(“xxx.pdf”,SaveFormart.PDF);转换前后的样子可以参考图片:后_20230822103703.png (45.8 KB)
前_20230822103626.png (1.6 KB)

@SalesDhorde, 这与此线程中的问题相同吗?

Microsoft Word 使用 Cambria Math 字体来表示数学公式。 你能检查一下这个字体是否安装了吗?

如果安装Cambria Math字体后问题仍然存在,请附上输入的Word文档和输出的PDF文件进行分析。

我看了下服务器上已经存在Cambria Math字体了11.jpg (459.8 KB)

word文件为 demo.zip (3.2 KB)

@wsws2188, 如果安装了Symbol字体,Microsoft Word 和 Aspose.Words 可以正确呈现此数学公式。

word 可以正常展示,但是转换后的pdf文件是乱码。注意 是word转换后的pdf文件

@wsws2188, 能附上有乱码的PDF文件吗?

Desktop.zip (23.0 KB)
word原文档和pdf文档都有了, 麻烦了。

@wsws2188,
正如我之前所写,您需要安装Symbol字体。 在您的Word文档中,数学公式使用符号字体。 请比较您的 PDF 和 Microsoft Word 创建的 PDF 的屏幕截图:


demo.word.pdf (47.9 KB)

要正确显示数学公式,您需要这种Symbol字体:

图片 我都看不到,麻烦您再发一次图片

@wsws2188, 您看不到图像,因为您不是该论坛帖子的创建者。 我已将我的答案复制到您昨天创建的论坛帖子

我已经从windows上把symbol 字体安装到服务器了,但是依旧转换失败。服务器上的字体缓存也做了对应的更新
11.jpg (426.5 KB)

@wsws2188, 您能否在出现字体问题的服务器上运行以下代码,并检查是否打印了任何字体替换警告:

Document doc = new Document("demo.doc"); 
doc.setWarningCallback(new IWarningCallback() {
    @Override
    public void warning(WarningInfo warningInfo) {
        if (WarningType.FONT_SUBSTITUTION == warningInfo.getWarningType()) {
            System.out.println(warningInfo.getDescription());
        }
    }
});

doc.save("output.pdf");

如您所说,确实有相关错误提示1111.jpg (454.7 KB)

但是这些字体都已经安装到服务器上了

@wsws2188, 您能否在出现字体问题的服务器上运行以下代码并检查 Aspose.Words 可以找到的所有可用字体:

// Get available fonts from FontSettings
ArrayList<FolderFontSource> fontSources = new ArrayList(
		Arrays.asList(FontSettings.getDefaultInstance().getFontsSources()));

// Convert the Arraylist of source back into a primitive array of FontSource
// objects.
FontSourceBase[] updatedFontSources = (FontSourceBase[]) fontSources
		.toArray(new FontSourceBase[fontSources.size()]);

for (PhysicalFontInfo fontInfo : (Iterable<PhysicalFontInfo>) updatedFontSources[0].getAvailableFonts()) {
	System.out.println("FontFamilyName : " + fontInfo.getFontFamilyName());
	System.out.println("FullFontName  : " + fontInfo.getFullFontName());
	System.out.println("Version  : " + fontInfo.getVersion());
	System.out.println("FilePath : " + fontInfo.getFilePath());
}