嘿,朋友们!在开发中,经常会碰到需要把 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。你可以根据自己的需求和喜好选择合适的方法。赶紧动手试试,让你的程序轻松搞定文档转换!