1、使用aspose-words,这是个收费的,需要购买获取license.xml中的秘钥,本文只介绍使用方法,请支持正版apose官网
2、笔者采坑记录:jacob也可以实现word转PDF且Jacob是不收费的,但是Jacob只支持windows,不支持linux

一、jar包依赖

1、jar包获取地址
链接: jar包下载 提取码: mp59
2、jar包添加到本地maven仓库
jar包下载之后进入到命令行执行:

mvn install:install-file -Dfile=aspose-words-15.8.0-jdk16.jar -DgroupId=com.jcraft -DartifactId=aspose-words -Dversion=15.8.0-jdk16 -Dpackaging=jar

执行完毕之后可以看到本地maven仓库中生成了com.jcraft.aspose-words路径的文件
3、引用依赖

<!-- word2pdf -->
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>aspose-words</artifactId>
            <version>15.8.0-jdk16</version>
        </dependency>

二、license.xml

license.xml放到项目根目录下。

<License>
    <Data>
        <Products>
            <Product>Aspose.Total for Java</Product>
            <Product>Aspose.Words for Java</Product>
        </Products>
        <EditionType>Enterprise</EditionType>
        <SubscriptionExpiry>20991231</SubscriptionExpiry>
        <LicenseExpiry>20991231</LicenseExpiry>
        <SerialNumber>---</SerialNumber>
    </Data>
    <Signature>---</Signature>
</License>

三、Java代码

/**
     * word 转 PDF
     *
     * @param wordPath word路径
     * @param pdfPath  pdf路径
     */
    private void word2pdf(String wordPath, String pdfPath) {
        // 验证License 若不验证则转化出的pdf文档会有水印产生
        if (WordUtil.getLicense()) {
            try {
                long old = System.currentTimeMillis();
                //新建一个空白pdf文档
                File file = new File(pdfPath);
                FileOutputStream os = new FileOutputStream(file);
                Document doc = new Document(wordPath);
                //设置一个字体目录(必须设置,否则生成的pdf乱码)下面这行代码不加的话在windows系统下生成的pdf不存在乱码问题,但是在linux系统下会乱码,linux下乱码解决方案请看后面的解决方案
                //FontSettings.setFontsFolder("/usr/share/fonts/chinese", false);
                doc.save(os, SaveFormat.PDF);
                os.close();
                long now = System.currentTimeMillis();
                logger.info("word2pdf共耗时:{}秒", ((now - old) / 1000.0));
            } catch (Exception e) {
                logger.error("word2pdf异常", e);
                e.printStackTrace();
            }
        }
    }
    /**
     *  WordUtil.getLicense()
     * 判断是否有授权文件 如果没有则会认为是试用版,转换的文件会有水印
     */
    public static boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = WordUtil.class.getClassLoader().getResourceAsStream("license.xml");
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

四、Linux乱码解决(pdf中文被小方框代替了)

1、问题详情

使用com.aspose.words将word模板转为PDF文件时,在开发平台window下转换没有问题,中文也不会出现乱码。但是将服务部署在正式服务器(Linux)上,转换出来的PDF中文就出现了乱码。

2、问题分析

在window下没有问题但是在linux下有问题,就说明不是代码或者输入输出流编码的问题,根本原因是两个平台环境的问题。出现乱码说明linux环境中没有相应的字体以供使用,所以就会导致乱码的出现。将转换无问题的windos主机中的字体拷贝到linux平台下进行安装,重启服务器后转换就不会出现乱码了。

3、解决方案

Windows下字体库的位置为C:\Windows\fonts
linux的字体库是 /usr/share/fonts
步骤:
a、将windows下的字体上传到linux上:/usr/share/fonts/chinese
b、执行以下命令

cd /usr/share/fonts/chinese/
chmod 755 /usr/share/fonts/chinese/*
yum install mkfontscale
mkfontscale
mkfontdir
fc-cache

c、将上面代码中//FontSettings.setFontsFolder("/usr/share/fonts/chinese", false);的注释放开