- 商业库(推荐,效果最好):如 Aspose.Words 和 Spire.Doc,这是最稳定、效果最好的方法,能最大程度地保留原PDF的格式(如图片、表格、字体、布局等)。
- 开源库(有局限性):如 Apache PDFBox,这种方法是免费的,但转换效果通常不太理想,尤其是在处理复杂布局和图片时,容易出现格式错乱。
- 调用外部服务(云端API):如 Google Cloud Vision API、Adobe PDF Services API 等,这种方法需要网络连接,并且通常有调用次数限制。
下面我将重点介绍最常用的 Aspose.Words 和开源的 Apache PDFBox 的实现代码。

使用商业库 Aspose.Words (效果最佳)
Aspose.Words 是一个功能强大的文档处理库,其PDF到Word的转换质量非常高,能很好地处理文本、图片、表格和字体。
添加依赖
您需要在您的项目中添加 Aspose.Words 的依赖,对于 Maven 项目,在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>23.8</version> <!-- 请使用最新版本 -->
</dependency>
对于 Gradle 项目:
implementation 'com.aspose:aspose-words:23.8' // 请使用最新版本
注意:Aspose.Words 是一个商业库,您需要从其官网 购买许可证 或申请 临时许可证 来使用,在未授权的情况下,转换后的文档会带有评估水印。

Java 代码示例
import com.aspose.words.*;
public class PdfToWordConverter {
public static void main(String[] args) {
// 1. 定义输入和输出文件路径
String pdfFilePath = "input.pdf";
String docxFilePath = "output.docx";
try {
// 2. 加载许可证(如果有的话,移除评估水印)
// License license = new License();
// license.setLicense("Aspose.Words.Java.lic"); // 将你的许可证文件放在项目根目录下
// 3. 加载PDF文档
Document doc = new Document(pdfFilePath);
// 4. 保存为Word DOCX格式
// SaveFormat.DOCX 表示保存为 .docx 文件
// SaveFormat.DOC 表示保存为 .doc 文件
doc.save(docxFilePath, SaveFormat.DOCX);
System.out.println("PDF 转 Word 成功!输出文件路径: " + docxFilePath);
} catch (Exception e) {
System.err.println("转换过程中发生错误: " + e.getMessage());
e.printStackTrace();
}
}
}
代码说明:
new Document(pdfFilePath):这行代码会读取PDF文件并创建一个Aspose文档对象。doc.save(...):将文档对象保存为指定的格式,Aspose会自动处理PDF到Word的转换逻辑。
使用开源库 Apache PDFBox (免费但有局限)
Apache PDFBox 是一个纯Java的开源库,主要用于处理PDF文件,它也可以将PDF转换为文本,但不能直接转换为格式完整的Word文档(.docx),它的主要作用是提取文本内容,然后你可以将这些文本写入到一个 .docx 文件中(这需要另一个库来创建Word文档,如 docx4j 或 Apache POI),这种方法只适用于纯文本、格式简单的PDF。
添加依赖
在 pom.xml 中添加 PDFBox 的依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version> <!-- 请使用最新版本 -->
</dependency>
Java 代码示例 (提取文本并保存为txt,再用其他工具转为docx)
这个例子演示了如何从PDF中提取纯文本,并将其保存为一个 .txt 文件,这展示了PDFBox的核心功能,要得到 .docx 文件,你需要结合其他库。

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import java.io.File;
import java.io.IOException;
public class PdfToTextWithPdfBox {
public static void main(String[] args) {
// 1. 定义输入和输出文件路径
String pdfFilePath = "input.pdf";
String txtFilePath = "output.txt";
try (PDDocument document = PDDocument.load(new File(pdfFilePath))) {
// 2. 创建一个PDFTextStripper对象来提取文本
PDFTextStripper stripper = new PDFTextStripper();
// 3. 提取所有页面的文本
String text = stripper.getText(document);
// 4. 将提取的文本写入到txt文件中
// 注意:这里需要自己处理文件写入逻辑
// 你可以使用 java.nio.file.Files 或其他IO库
System.out.println(text); // 打印到控制台
// 为了保存到文件,这里使用一个简单的示例
// 实际项目中,请使用更健壮的文件写入方式
java.nio.file.Files.write(java.nio.file.Paths.get(txtFilePath), text.getBytes());
System.out.println("PDF 文本提取成功!已保存到: " + txtFilePath);
} catch (IOException e) {
System.err.println("处理PDF文件时发生错误: " + e.getMessage());
e.printStackTrace();
}
}
}
代码说明:
PDDocument.load(...):加载PDF文件。new PDFTextStripper():创建一个文本剥离器。stripper.getText(document):执行文本提取,返回一个包含所有文本的字符串。- 局限性:这个方法完全丢失了原始PDF的格式、图片、表格等信息,它只得到了文本内容,如果你需要将这些文本放入一个Word文档,你需要使用像
Apache POI这样的库来创建.docx文件,但这会是一个更复杂的过程,且最终结果只是一个没有格式的纯文本Word文档。
总结与对比
| 特性 | Aspose.Words (商业) | Apache PDFBox (开源) |
|---|---|---|
| 转换质量 | 非常高,能完美保留布局、图片、表格、字体等。 | 非常低,仅能提取纯文本,格式完全丢失。 |
| 易用性 | 非常简单,一行代码即可完成转换。 | 复杂,主要用于文本提取,不能直接生成Word。 |
| 成本 | 收费,需要购买许可证。 | 免费。 |
| 适用场景 | 对转换质量有要求的专业项目、企业应用。 | 预算有限,只需提取PDF中的纯文本内容。 |
| 依赖 | 仅需 Aspose.Words 一个库。 | 仅需 PDFBox 一个库(若仅需文本)。 |
最终建议
- 如果你的项目预算允许,且对转换质量有要求,强烈推荐使用 Aspose.Words,它能为你节省大量的开发和调试时间,并提供最稳定、最专业的结果。
- 如果你的项目是个人学习、非商业用途,或者只需要从PDF中提取纯文本,Apache PDFBox 是一个不错的选择。
- 不要期望免费的开源库能像商业库一样完美地处理复杂PDF,对于包含扫描图片、复杂表格、特殊字体的PDF,开源库的转换结果通常是无法接受的。
