Java 通过aspose.words 把docx文件转成pdf文件后标题变成小方块

如图:docx文件内容
1206652-20220614173715446-896221977.png (58.8 KB)

转换后的pdf内容:

1206652-20220614173701036-950503314.png (46.7 KB)

java

问题补充:

其他内容都正常,就算有图片也能正常转换,就是这个标题艺术字不行
另外我这是在windows环境就这样,不是Linux环境

@alone19825, 看起来一些字体缺少。请运行以下代码,并检查是否报告字体是否丢失:

Document doc = new Document("in.docx");

FontSubstitutionWarningCollector callback = new FontSubstitutionWarningCollector();
doc.setWarningCallback(callback);

doc.save("out.pdf")

private static class FontSubstitutionWarningCollector implements IWarningCallback {
    /// <summary>
    /// Called every time a warning occurs during loading/saving.
    /// </summary>
    public void warning(WarningInfo info) {
        if (info.getWarningType() == WarningType.FONT_SUBSTITUTION)
            System.out.println(info.getDescription());

    }
}

IWarningCallback

如果您收到有关缺少字体的消息,请确保已安装字体。 或者,您可以使用以下方法之一指定字体位置:

例如:

FontSettings.getDefaultInstance().setFontsSources(
		new FontSourceBase[] { new SystemFontSource(), new FolderFontSource("path to font folder", true) });

如果没有帮助,请附上显示问题的 Aspose.Words 创建的Word文档和PDF。

按照你的代码执行后,pdf直接变成空的了微信图片_20220622112654.png (50.2 KB)
微信图片_20220622112617.png (54.9 KB)

微信图片_20220622113618.png (81.7 KB)

我这个是 aspose-words-15.8.0-crack.jar 版本的,好像没有FontSettings.getDefaultInstance()方法

123.docx (11.5 KB)
123.pdf (94.5 KB)

@alone19825, 您正在使用非常旧版本的 Aspose.Words for Java。 最新版本的 Aspose.Words for Java 中存在 Fontsettings.getDefaultInstance 方法。

这是一个证明 Aspose.Java for Java 22.5 的文字可以使您的文档与 Microsoft Word 相同的方式渲染:

123.Aspose.Words.22.5.pdf
123.Word2019.pdf

请考虑购买最新版本的 Aspose.Words for Java 的许可证:Pricing - Purchase - aspose.com

@dshvydkiy 我更换了版本,但是在windows环境下可以正常,换到linux环境下就会出现艺术字标题变成方块,或者直接整个pdf都是空白的情况

    :

Font ‘华康简标题宋’ has not been found. Using ‘FangSong’ font instead. Reason: font info substitution.

    :

Font ‘方正小标宋_GBK’ has not been found. Using ‘Times New Roman’ font instead. Reason: default font substitution.
提示少这两个字段,并自动替换了,怎么才能设置这两个字体

@dshvydkiy 或者说怎么才能兼容所有的中文字体,以及艺术字标题

@alone19825, 可以附上 Aspose.Words 在 Windows 和 Linux 中创建的 Word 文档和 PDF 文件吗? 这将帮助我分析问题所在。

@dshvydkiy
451xx市xx区xx关于市十六届人xx第20222533号建议答复的函.docx (24.3 KB)

@dshvydkiy第20222510号建议答复的函.docx (17.7 KB)

@dshvydkiy 451xxxx区xx政府关于市xxx一次会议第20222533号建议答复的函.pdf (69.6 KB)

@alone19825, 我无法用Aspose.Words 21.1复制该问题,您用来将Word文件转换为PDF文件。
您可以共享用于将Word文档转换为PDF的代码吗?

451xx市xx区xx关于市十六届人xx第20222533号建议答复的函.aspose.words.21.1.pdf (126.8 KB)

@dshvydkiy

public static String doc2pdf(String wordPath, String pdfPath) {
        try {
            long old = System.currentTimeMillis();
            File file = new File(pdfPath);
            FileOutputStream os = new FileOutputStream(file);
            Document doc = new Document(wordPath);
//            FontSettings.getDefaultInstance().setFontsSources(
//                    new FontSourceBase[] { new SystemFontSource(), new FolderFontSource("C:\\Windows\\Fonts", true) });
            WordPdfUtil callback = new WordPdfUtil();
            doc.setWarningCallback(callback);
            doc.save(os, SaveFormat.PDF);
            long now = System.currentTimeMillis();
            os.close();
            //转化用时
            System.out.println("Word 转 Pdf 共耗时:" + ((now - old) / 1000.0) + "秒");
        } catch (Exception e) {
            System.out.println("Word 转 Pdf 失败...");
            e.printStackTrace();
        }
        return pdfPath;
    }

@alone19825, 您需要将丢失的字体文件复制到 Linux 中的某个文件夹,例如,复制到 /home/user/fonts。 然后运行以下代码:

FontSettings.getDefaultInstance().setFontsSources(
    new FontSourceBase[] { 
        new SystemFontSource(), 
        new FolderFontSource("/home/user/fonts", true) 
    });

Document doc = new Document(wordPath);
doc.save(pdfPath);

请参考本文档:

@dshvydkiy
好的,谢谢您