Java操作word文档将docx转换为pdf格式

一.整体说明

在上传 Office 课件时,格式有:doc,docx,xls,xlsx,ppt,pptx,程序需要将其 转换成 pdf 格式,
才能实现在线查看和预览,此时需要安装课件转换插件,如课 件只使用视频或者 pdf,可无需安装.

二.插件说明

课件转换组件支持两种,分别为 LibreOffice 和 OpenOffice 两种,两个安装一 个即可,本文推荐使用 LibreOffice

三.插件下载

进入 LibreOffice 官网:点击下载

四.组件安装

4.1 上传文件
将下载好的 LibreOffice_6.4.7_Linux_x86-64_rpm.tar.gz 上传到服务器的任意 位置,本位将组件放置位置为: /home/LibreOffice_6.4.7_Linux_x86-64_rp m.tar.gz

4.2解压文件

cd /home
tar -xvf LibreOffice_6.4.7_Linux_x86-64_rpm.tar.gz

4.3安装组件

cd /home/LibreOffice_6.4.7.2_Linux_x86-64_rpm/RPMS/ 
yum localinstall *.rpm -y

等待组件安装完毕即可
4.4 获取配置

进入系统/opt 目录,可以看到 libreoffice6.4 文件夹,此文件夹的路径则是程序 要的 OfficeHome,完整路径为:/opt/libreoffice6.4 (注意,不同版本和不同 系统,此文件夹的位置都不一样)
Linux 系统一般为:/opt/libreofficex.x
MacOs 系统一般为:/Applications/LibreOffice.app/Contents
Windows 系统一般为:C:/Program Files/LibreOffice

4.5配置程序(此处可忽略,在第五步,Java代码编写中进行了配置)
打开程序配置文件,如:application-*.yml 或外置配置文件 application-local.yml,修改 office-home 配置,如:

# 文档转换
jodconverter:
  local:
    enabled: true
    office-home: C:/Program Files/LibreOffice
    max-tasks-per-process: 10
    port-numbers: 8100

五.Java代码编写

5.1 先进行依赖导入

<!-- 文件转换,通过OpenOffice或LibreOffice来转换 -->
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-core</artifactId>
            <version>4.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-spring-boot-starter</artifactId>
            <version>4.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-local</artifactId>
            <version>4.4.2</version>
        </dependency>

5.2 yml中数据配置

# 文档转换
jodconverter:
  local:
    enabled: true
    office-home: C:/Program Files/LibreOffice
    max-tasks-per-process: 10
    port-numbers: 8100

此处我使用的开发环境是windows,如果上线到linux服务器,需要替换office-home目录(在上述4.4中已经进行了说明)
port-numbers 端口为文档转换的端口,可随意替换,但是保证不被占用
5.3

@Lazy
    @Autowired
    private DocumentConverter converter;
/**
     * 传入完整的URL路径
     * @param input  word文件所在位置
     * @param dist   word转pdf后的文件位置
     * @throws OfficeException
     */
    @Override
    public String convert(String input, String dist) throws ServiceException {
        log.info("++++++++++传入:"+input);
        //源文件读取不到
        File srcFile = new File(input);
        if(!srcFile.exists()){
            throw new ServiceException("输入文件不存在!");
        }
        log.info("++++++++++目标文件:"+dist);
        //生成时要增加后.pdf后缀,否则无法转换
        File outputFile = new File(dist);
        //必须包含后缀才能转换
        try {
            converter.convert(srcFile)
                    .as(DefaultDocumentFormatRegistry.PDF)
                    .to(outputFile)
                    .execute();
            return dist;
        }catch (OfficeException e){
            throw new ServiceException("文件转换过程发生错误:"+e.getMessage());
        }
    }

注意:DocumentConverter 属于导入的依赖的中的接口文件
5.4 配置pdf 的访问路径

/**
     * 转换文档类型数据
     * @param provide
     * @param entity
     * @throws ClientException
     */
    private void convertDocx(CertGrant certGrant,String url) throws ClientException {
        // 本地上传
        LocalConfig conf = localUpService.getConfig();
        // 相对文件路径
        // 变成物理路径
        String path = this.getRealPath(conf, url);
        // 目标地址
        String dist = path+".pdf";
        // 返回物理路径(pdf的物理路径 此处没用)
        String rest = officeService.convert(path, dist);
        // 再变回访问路径
        String result = url + ".pdf";
        //TODO 转换Doc
        certGrant.setCertFilePdf(result);
//        this.saveOrUpdate(certGrant);
        return;
    }

注意:officeService.convert()方法返回的是原word文档的网络地址, 需要在后缀添加 “.pdf”,即可在网络中访问次pdf文件

如图所示

java word 转换图片 java doc转换docx_linux