Java实现Word转PDF文件(高效不失真)

两种主流方案详解 | 完整代码示例 | 生产环境可用

摘要:在企业应用开发中,经常需要将Word文档转换为PDF格式以确保内容的不可篡改性和跨平台一致性。本文将介绍两种在Java中高效、不失真地实现Word转PDF的方法,并提供完整的可运行代码。

为什么选择Java进行Word转PDF?

Java作为企业级应用开发的主流语言,在文档处理方面有着成熟的解决方案。通过Java程序自动化转换Word到PDF,可以:

方法一:使用 Apache POI + iText

此方法适用于简单的.docx文档转换,依赖纯Java库,部署简单。

添加Maven依赖

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext7-core</artifactId>
        <version>7.1.15</version>
        <type>pom</type>
    </dependency>
</dependencies>

Java转换代码

import org.apache.poi.xwpf.usermodel.*;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class WordToPdfConverter {
    
    public static void convert(String wordPath, String pdfPath) throws Exception {
        // 读取Word文档
        XWPFDocument document = new XWPFDocument(new FileInputStream(wordPath));
        
        // 创建PDF写入器
        PdfWriter writer = new PdfWriter(pdfPath);
        com.itextpdf.kernel.pdf.PdfDocument pdfDoc = new com.itextpdf.kernel.pdf.PdfDocument(writer);
        Document pdfDocument = new Document(pdfDoc);
        
        // 遍历Word段落并写入PDF
        for (XWPFParagraph paragraph : document.getParagraphs()) {
            String text = paragraph.getText();
            if (text != null && !text.trim().isEmpty()) {
                pdfDocument.add(new Paragraph(text));
            }
        }
        
        // 关闭资源
        pdfDocument.close();
        document.close();
    }
    
    public static void main(String[] args) {
        try {
            convert("input.docx", "output.pdf");
            System.out.println("转换完成!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
注意:此方法对复杂格式(如表格、图片、样式)支持有限,适合内容简单的文档。

方法二:调用 LibreOffice(推荐,高保真)

利用LibreOffice强大的文档渲染引擎,通过命令行调用实现高质量的Word到PDF转换,几乎完美保留原始格式。

前提条件

在服务器上安装 LibreOffice

Java调用代码

import java.io.File;

public class LibreOfficeConverter {
    
    /**
     * 使用LibreOffice将Word文档转换为PDF
     * @param inputWordPath 输入的Word文件路径
     * @param outputPdfPath 输出的PDF文件路径
     * @return 转换是否成功
     */
    public static boolean convertToPdf(String inputWordPath, String outputPdfPath) {
        try {
            File inputFile = new File(inputWordPath);
            File outputFile = new File(outputPdfPath);
            
            // 确保输入文件存在
            if (!inputFile.exists()) {
                System.err.println("输入文件不存在: " + inputWordPath);
                return false;
            }
            
            // 构建命令
            String command;
            if (System.getProperty("os.name").toLowerCase().contains("win")) {
                // Windows系统
                command = "soffice --headless --convert-to pdf --outdir \"" 
                        + outputFile.getParent() + "\" \"" + inputWordPath + "\"";
            } else {
                // Linux/Mac系统
                command = "libreoffice --headless --convert-to pdf --outdir \"" 
                        + outputFile.getParent() + "\" \"" + inputWordPath + "\"";
            }
            
            // 执行命令
            Process process = Runtime.getRuntime().exec(command);
            int exitCode = process.waitFor();
            
            // 检查输出文件
            File generatedPdf = new File(outputFile.getParent(), 
                    inputFile.getName().replaceFirst("\\.[^.]+$", "") + ".pdf");
            
            return exitCode == 0 && generatedPdf.exists();
            
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    
    public static void main(String[] args) {
        boolean success = convertToPdf("example.docx", "result.pdf");
        System.out.println("转换" + (success ? "成功" : "失败"));
    }
}
优势:格式保持度极高,支持.doc和.docx,适合生产环境。
缺点:需要安装LibreOffice,占用资源较多。

性能对比与选择建议

方案 转换质量 部署复杂度 适用场景
Apache POI + iText ★☆☆☆☆ 低(纯Java) 简单文本文档,轻量级应用
LibreOffice调用 ★★★★★ 中(需安装软件) 正式生产环境,要求高保真
so文件查看工具指南 - Linux共享库分析实用方法 三国文布 - 探索真实的三国历史与文化 三国志历代谁最火?深度解析最受欢迎的三国志系列作品 Word去除波浪线方法大全 - 快速解决红色/蓝色波浪下划线问题 Word文档怎么导入视频?详细图文教程 - 办公技巧指南 Winlator OBB文件下载 - 安卓上运行Windows游戏的必备资源 Word文档重复内容检测工具 - 在线查找并去除重复文本 三国志11武将专题:石勒 - 历史与游戏中的传奇人物 Word文字每行后出现空行?原因与解决方法全解析 Word文档邮件在哪里找?快速查找邮件中的Word附件方法 怎么用手机编辑Word文档?详细操作指南与技巧 - 移动办公必备 Word看不到修订痕迹?原因与解决方法全解析 Word箭头与文本框对齐技巧 - 详细图文教程 Word行间距无法调整怎么办?原因分析与解决方法大全 三国志11永安堵路全解析 - 经典策略游戏深度攻略 Word打开是兼容模式怎么处理?完整解决方法指南 PDF文件过大如何减小?5种简单方法快速压缩PDF - 实用指南 三国志重制版 - 经典策略战棋手游官网 spacedesk安卓最新版本下载 - 免费无线扩展屏幕解决方案 Word是Office软件吗?深入解析Word与Office的关系 三国武将马延专题 - 生平事迹与历史评价 三国樊稠 - 东汉末年将领生平专题 Word一键生成PPT - 高效办公新体验 三国志国别体专题 | 魏蜀吴三国历史深度解析 三国志11铜雀台 - 经典策略游戏专题 手机查看MD文件:简单实用的方法指南 SW映射文件百度网盘下载 - 星际争霸自定义地图分享 OFD格式的文件怎么打开?详细方法指南 Word打着打着不能打字了?原因与解决方法全解析 Word文档不能编辑怎么解锁?多种方法快速解决编辑限制 三国志13女将专题 - 传奇女性武将全解析 三国志9蜀国组队攻略:最强阵容搭配与武将推荐 三国志几好玩?深度解析经典策略游戏魅力 如何让PDF文件变小?多种方法轻松压缩PDF Win10缺少DLL文件怎么办?常见DLL缺失问题与修复方法大全 《三国志·魏志》专题 - 魏国历史与人物全览 Word中文版式完全指南 - 掌握专业中文文档排版技巧 三国志魏书后妃传 - 魏国后宫历史人物专题 Word表格文档字间距怎么调?详细图文教程 Word段落设置详解 - 调整对齐、缩进与行距的完整指南 三国董袭专题 - 东吴名将生平事迹全解析 Word红头文件如何制作 - 详细图文教程 PDF文件过大如何减小?5种简单有效的压缩方法 三国人物专题:蜀汉官员赖恭生平事迹 三国志11土垒堵路全攻略 - 高级战术与实战技巧 三国志11连环内讧全解析 - 高级计策与实战技巧 Word撤销不见了?快速解决方法大全 三国志曹仁搭配攻略:最强阵容与技能组合推荐 扫描图片变成Word文档的软件推荐 - 高效OCR转换工具 Word文档修订模式怎么取消?详细步骤一键关闭 - 实用办公技巧 三国志9文鸯在哪?详细位置与登场时间攻略 Word文字偏左怎么调整到中间?多种方法轻松解决 怎么降低PDF文件大小?5种实用方法分享 Word突然打不了中文了?原因与解决方法大全 三国志11飞将搭配全攻略 - 最佳武将组合与战术应用 白衣渡江三国志 - 三国历史著名战役专题 vsdx文件能用Word打开吗?详解Visio文件与Word的兼容性 Word字间距调整完全指南 - 掌握文档排版技巧 Word文档设置底色 - 详细图文教程 两个Word文档怎么对比?5种简单方法快速找出差异 Word文档表格怎么合并?图文详解合并单元格与表格方法 Windows镜像文件下载 - 官方纯净版ISO获取指南 三国志8城市特征全解析 - 玩家必备攻略指南 HTML文件转Word文档 - 简单高效的转换方法 电脑上OFD文件如何打开?多种方法详解 视频怎么做成Word文档?5种实用方法详解 三国志8管辂相性详解 - 人物属性与游戏策略分析 Word文档批量删除重复文字 - 简单高效的批量处理方法 Word文档超过了20MB如何缩小?5种简单方法快速压缩文件 Word在文字上加横线(删除线)的详细方法教程 Word文档怎么编辑文字 - 新手图文教程 红头文件模板Word格式下载 - 标准党政机关公文模板 Word删除文字快捷键大全 - 高效编辑技巧指南 三国曹华专题 - 生平事迹与历史评述 三国志10诸葛亮专题 | 能力、特技与游戏攻略 Word文档查找重复内容方法大全 - 高效办公技巧 三国志11武将专题:潘璋 - 属性、技能与使用攻略 Word找不到文件选项怎么办?快速解决方法 Word表格无法编辑?原因与解决方法全解析 ToDesk远程控制软件 - 高效安全的远程桌面连接工具 三国志11马超寿命详解 - 武将寿命与登场剧本分析 Word不能输入文字?多种原因及解决方法详解 - 故障排除指南 三国志11王朗列传 - 武将生平与游戏策略详解 Word文档导入PPT文件完整指南 - 高效转换技巧与步骤 Word怎么改成中文界面?超详细图文教程 - 一键切换Office语言 spacedesk如何有线连接?详细教程与设置方法 Word里的邮件功能在哪?一文看懂邮件合并使用方法 两个PDF文件对比查看 - 在线免费比较PDF差异 三国志11鬼百鬼 - 经典MOD专题页 SolidWorks软件官方介绍与资源下载 - 专业三维设计工具 手机如何打开ODT文件?安卓与iOS操作指南 Word打印黑白设置及调整方法 - 全面指南 手机怎样播放DAT文件?多种方法轻松解决播放问题 Word文档字打不上去怎么回事?原因与解决方法大全 Word文档排版格式设置完全指南 - 提升办公效率 Word符号大全 - 常用特殊符号、插入方法与使用技巧 三国志11武将告密机制全解析 - 告密信件、触发条件与应对策略 视频怎么放在Word文档上?详细操作方法指南 手机如何打开DWF文件?安卓与iPhone查看DWF文件的完整指南 两篇Word文档重复检测工具 - 在线免费文本比对