Java实现一键将Word文档转为PDF

 更新时间:2025年02月09日 12:44:31   作者:五行星辰  
在开发中,经常会碰到需要把 Word 文档转换成 PDF 格式的需求,Java 有不少好用的库能实现这个功能,本文为大家介绍了两个常用的方法,需要的可以了解下

在开发中,经常会碰到需要把 Word 文档转换成 PDF 格式的需求,像生成报告、合同啥的。Java 有不少好用的库能实现这个功能,下面就给大家介绍两种常见的方法,分别使用 Apache POI 和 Docx4J 结合 iText 库来实现 Word 转 PDF。

方法一:使用 Apache POI 和 iText

1. 引入依赖

如果你用 Maven 管理项目,在 pom.xml 里添加以下依赖:

<dependencies>
    <!-- Apache POI 处理 Word 文档 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    <!-- iText 生成 PDF 文档 -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.13.3</version>
    </dependency>
</dependencies>

2. 代码示例

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
 
import java.io.*;
 
public class WordToPdfWithPOI {
    public static void main(String[] args) {
        try {
            // 读取 Word 文档
            FileInputStream fis = new FileInputStream("input.docx");
            XWPFDocument document = new XWPFDocument(fis);
 
            // 创建 PDF 文档
            Document pdfDoc = new Document();
            PdfWriter.getInstance(pdfDoc, new FileOutputStream("output.pdf"));
            pdfDoc.open();
 
            // 遍历 Word 文档的段落
            for (XWPFParagraph paragraph : document.getParagraphs()) {
                StringBuilder text = new StringBuilder();
                // 遍历段落中的文本运行对象
                for (XWPFRun run : paragraph.getRuns()) {
                    text.append(run.getText(0));
                }
                // 将段落文本添加到 PDF 文档中
                Paragraph pdfParagraph = new Paragraph(text.toString());
                pdfDoc.add(pdfParagraph);
            }
 
            // 关闭文档和流
            pdfDoc.close();
            document.close();
            fis.close();
 
            System.out.println("Word 转 PDF 成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Word 转 PDF 失败:" + e.getMessage());
        }
    }
}

3. 代码解释

读取 Word 文档:用 FileInputStream 读取 input.docx 文件,再用 XWPFDocument 类把它加载到内存。

创建 PDF 文档:创建 Document 对象表示 PDF 文档,用 PdfWriter 关联输出流,然后打开文档准备写入内容。

遍历 Word 文档段落:遍历 Word 文档的每个段落,把段落里的文本提取出来,添加到 StringBuilder 里,再创建 Paragraph 对象添加到 PDF 文档中。

关闭文档和流:操作完成后,关闭 PDF 文档、Word 文档和输入流。

方法二:使用 Docx4J

1. 引入依赖

在 pom.xml 里添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-JAXB-Internal</artifactId>
        <version>11.4.9</version>
    </dependency>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
        <version>11.4.9</version>
    </dependency>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j</artifactId>
        <version>11.4.9</version>
    </dependency>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-export-fo</artifactId>
        <version>11.4.9</version>
    </dependency>
</dependencies>

2. 代码示例

import org.docx4j.Docx4J;
import org.docx4j.convert.out.FOSettings;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
 
public class WordToPdfWithDocx4J {
    public static void main(String[] args) {
        try {
            // 加载 Word 文档
            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File("input.docx"));
 
            // 创建 FOSettings 对象
            FOSettings foSettings = Docx4J.createFOSettings();
            foSettings.setWmlPackage(wordMLPackage);
 
            // 创建输出流
            OutputStream os = new FileOutputStream(new File("output.pdf"));
 
            // 转换并保存为 PDF
            Docx4J.toPDF(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
 
            // 关闭输出流
            os.close();
 
            System.out.println("Word 转 PDF 成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Word 转 PDF 失败:" + e.getMessage());
        }
    }
}

3. 代码解释

加载 Word 文档:用 WordprocessingMLPackage.load 方法加载 input.docx 文件。

创建 FOSettings 对象:FOSettings 用于配置转换设置,把加载的 Word 文档设置进去。

创建输出流:创建 FileOutputStream 用于输出 PDF 文件。

转换并保存为 PDF:调用 Docx4J.toPDF 方法进行转换,并将结果保存到输出流。

关闭输出流:操作完成后,关闭输出流。

嘿,朋友们!这两种方法都能帮你用 Java 把 Word 文档转换成 PDF。你可以根据自己的需求和喜好选择合适的方法。

到此这篇关于Java实现一键将Word文档转为PDF的文章就介绍到这了,更多相关Java Word转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java拦截器、过滤器和监听器的区别与作用详解

    Java拦截器、过滤器和监听器的区别与作用详解

    Java 拦截器、过滤器和监听器是在 Java Web 开发中常用的组件,它们各有特点和用途,下面将分别介绍它们的区别和作用,并提供具体的代码示例,需要的朋友可以参考下
    2025-06-06
  • 详解Java中字符流与字节流的区别

    详解Java中字符流与字节流的区别

    这篇文章主要介绍了详解Java中字符流与字节流的区别的相关资料,需要的朋友可以参考下
    2017-03-03
  • javascript checkbox全选和反选的简单实现

    javascript checkbox全选和反选的简单实现

    这篇文章主要介绍了javascript checkbox全选和反选的简单实现的相关资料,需要的朋友可以参考下
    2017-05-05
  • Activiti如何启动流程并使流程前进

    Activiti如何启动流程并使流程前进

    这篇文章主要介绍了Activiti如何启动流程并使流程前进,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java ArrayList底层方法的实现深度解析

    Java ArrayList底层方法的实现深度解析

    ArrayList是Java集合框架中List接口的动态数组实现,可以方便的存储和操作数据,这篇文章是进行ArrayList的一个自我实现,让我们从底层更深度地理解ArrayList(顺序表),感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • 详解java中的static关键字

    详解java中的static关键字

    这篇文章主要介绍了java中的static关键字的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • springboot Jpa多数据源(不同库)配置过程

    springboot Jpa多数据源(不同库)配置过程

    这篇文章主要介绍了springboot Jpa多数据源(不同库)配置过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • SpringSecurity中的跨域问题处理方案

    SpringSecurity中的跨域问题处理方案

    本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友参考下吧
    2025-11-11
  • Java过滤器模式原理及用法实例

    Java过滤器模式原理及用法实例

    这篇文章主要介绍了Java过滤器模式原理及用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • ThreadLocal 在上下文传值场景实践源码

    ThreadLocal 在上下文传值场景实践源码

    这篇文章主要为大家介绍了ThreadLocal在上下文传值场景下的实践源码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03

最新评论