Java 一键将 Word 文档转为 PDF

ops/2025/2/10 8:30:35/

嘿,朋友们!在开发中,经常会碰到需要把 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. 代码示例

 
java">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. 代码示例

 
java">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"));// 转换并保存为 PDFDocx4J.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。你可以根据自己的需求和喜好选择合适的方法。赶紧动手试试,让你的程序轻松搞定文档转换!


http://www.ppmy.cn/ops/157195.html

相关文章

V8 如何进行内存优化

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

JUnit 5 源码结构概览

JUnit 5 源码结构概览 JUnit 5 的源码分为三大核心模块&#xff1a;JUnit Platform、JUnit Jupiter 和 JUnit Vintage。每个模块职责明确&#xff0c;共同构建了现代化的测试框架。以下是详细的源码结构解析&#xff1a; 一、JUnit Platform 定位&#xff1a;测试框架的运行时…

DeepSeek R1 Distill Llama 70B(免费版)API使用详解

DeepSeek R1 Distill Llama 70B&#xff08;免费版&#xff09;API使用详解 在人工智能领域&#xff0c;随着技术的不断进步&#xff0c;各种新的模型和应用如雨后春笋般涌现。今天&#xff0c;我们要为大家介绍的是OpenRouter平台上提供的DeepSeek R1 Distill Llama 70B&…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>黄金矿工

目录 决策树&#xff1a;代码设计代码&#xff1a; 决策树&#xff1a; 代码设计 代码&#xff1a; class Solution {boolean[][] vis;int ret,m,n;public int getMaximumGold(int[][] grid) {m grid.length;n grid[0].length;vis new boolean[m][n]; for(int i 0; i <…

【专题】2025年我国机器人产业发展形势展望:人形机器人量产及商业化关键挑战报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p39668 机器人已广泛融入我们生活的方方面面。在工业领域&#xff0c;它们宛如不知疲倦的工匠&#xff0c;精准地完成打磨、焊接等精细工作&#xff0c;极大提升了生产效率和产品质量&#xff1b;在日常生活里&#xff0c;它们是贴心…

【实战篇】DeepSeek + ElevenLabs:让人工智能“开口说话”,打造你的专属语音助手!

最近,AI语音合成技术真是火得不行,各种“开口脆”的AI声音层出不穷,听得我直呼“这也太像真人了吧!” 作为一个科技爱好者,我当然不能错过这股潮流,这不,最近就沉迷于用 DeepSeek 和 ElevenLabs 这两款神器,捣鼓各种人声音频,简直停不下来! 先来科普一下这两位“主角…

Qt最新热点

Qt的最新热点主要集中在以下几个方面: 跨平台开发:Qt继续强调其在跨平台开发方面的优势,支持在Windows、macOS、Linux以及移动操作系统(如Android和iOS)上的应用开发。 Qt for Python:Qt for Python(PySide2和PySide6)的发展,为Python开发者提供了更强大的工具来创建桌…

背包问题1

核心&#xff1a; // f[i][j] 表示只看前i个物品&#xff0c;总体积是j的情况下&#xff0c;总价值是多少 //res maxx(f[n][]0-v] //f[i][j]: //1 不选第i个物品 f[i][j] f[i-1][j] //2 选第i个物品 f[i][j] f[i-1][j-v[i]] w[i]