• Java使用Documents4j实现Word转PDF(知识点+案例)


    前言

    博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

    涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

    博主所有博客文件目录索引:博客目录索引(持续更新)

    视频平台:b站-Coder长路


    源码获取

    项目源码:GiteeGithub

    本篇文档的视频系列讲解:Java实现自动化pdf打水印工具 开源PDF工具PDFBoxWord、Word转PDF开源工具Documents4j


    一、认识Documents4j

    ​ Documents4j 是一个开源的 Java 库,用于在 Java 应用程序中进行 Microsoft Office 文档(如 Word、Excel、PowerPoint 等)的转换。它利用 Microsoft Office 的本机 API,通过启动 Microsoft Office 进程来执行文档转换。Documents4j 提供了一种简单的方式来将 Office 文档转换为其他格式,例如将 Word 文档转换为 PDF、将 Excel 表格转换为 CSV 等。

    ​ Documents4j 的工作原理是通过将 Microsoft Office 作为外部进程启动,并与其进行通信来执行文档转换任务。这种方法使得可以利用 Microsoft Office 的强大功能来执行文档转换,同时又能够在 Java 环境中方便地进行集成和控制。

    ​ Documents4j 提供了一个简单的 API,使得在 Java 应用程序中执行文档转换变得简单。它支持多线程操作,并且具有一定的性能优化,使得可以高效地处理大量文档转换任务。


    二、快速集成

    2.1、pom.xml依赖

    
    <dependency>
        <groupId>com.documents4jgroupId>
        <artifactId>documents4j-localartifactId>
        <version>1.0.3version>
    dependency>
    
    <dependency>
        <groupId>com.documents4jgroupId>
        <artifactId>documents4j-transformer-msoffice-wordartifactId>
        <version>1.0.3version>
    dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.2、word转PDF实现

    项目目录

    image-20240215142419473

    WordUtils.java

    package com.changlu.utils;
    
    import com.documents4j.api.DocumentType;
    import com.documents4j.api.IConverter;
    import com.documents4j.job.LocalConverter;
    import java.io.*;
    
    public class WordUtils {
    
        /**
         * Word转PDF
         * @param filePath 源docx文件目录及名称  示例:C:\Users\93997\Desktop\watermark tools\watermarkTools\src\main\resources\2024-2-8计算机.docx
         * @param outFilePath 输出文件目录及名称 示例:C:\Users\93997\Desktop\watermark tools\watermarkTools\src\main\resources\2024-2-8.pdf
         */
        public static void wordToPdf(String filePath, String outFilePath) {
            //源文件地址
            File inputWord = new File(filePath);
            //导出文件地址
            File outputFile = new File(outFilePath);
            InputStream doc = null;
            OutputStream outputStream = null;
            try {
                doc = new FileInputStream(inputWord);
                outputStream = new FileOutputStream(outputFile);
                IConverter converter = LocalConverter.builder().build();
                //转换docx=>pdf
                boolean flag = converter.convert(doc).as(DocumentType.DOC).to(outputStream).as(DocumentType.PDF).execute();
                if (flag) {
                    converter.shutDown();
                }
                doc.close();
                outputStream.close();
                System.out.println("文件名:" + outFilePath + " 转换成功!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            String filePath = "C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\2024-2-8计算机.docx";
            String outFilePath = "C:\\Users\\93997\\Desktop\\watermark tools\\watermarkTools\\src\\main\\resources\\2024-2-8.pdf";
            //word转pdf
            WordUtils.wordToPdf(filePath, outFilePath);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    Demo6.java

    package com.changlu.demos;
    
    import com.changlu.utils.WordUtils;
    import java.io.UnsupportedEncodingException;
    
    /**
     * @Description: Documents4j案例:word转PDF实现
     * @Author: changlu
     * @Date: 2:18 PM
     */
    public class Demo6 {
        public static void main(String[] args) throws UnsupportedEncodingException {
    //        String originPath = URLDecoder.decode(Main.class.getClassLoader().getResource("input.docx").getFile(), "UTF-8"); //获取到的是target下的类目录
            String originPath = "F:\\00核心知识、成果、视频产出区\\技术视频\\2024.2.15 自制默默学打水印工具 watermark tools\\watermarkTools\\src\\main\\resources\\input.docx";
            String targetPath = originPath.replace("input.docx", "output.pdf");
            //docx转为pdf文件
            WordUtils.wordToPdf(originPath, targetPath);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    测试效果

    image-20240215142714648

    image-20240215142729247


    参考文章

    [1]. 不要在去充VIP啦 ,Java 实现 PDF、Word 互转


    资料获取

    大家点赞、收藏、关注、评论啦~

    精彩专栏推荐订阅:在下方专栏👇🏻

    更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


    整理者:长路 时间:2024.2.15

  • 相关阅读:
    bat 批示处理详解-2
    从键入网址到网页显示的详细过程
    Java语言数组
    瑞芯微rk1126 编译mp4v2记录 rk1126移植 ffmpeg
    统计学考研笔记:季度指数
    vscode交叉编译cmake工程,toolchains设置
    【XCTF】【GFSJ0523】【Crypto】【难度1】Caesar
    Linux快速入门之文件和目录
    牛客网之SQL100题(5)
    Docker 构建centos镜像yum报错,语言包下载报错
  • 原文地址:https://blog.csdn.net/cl939974883/article/details/136128301