明白了,你想在 Java 中将 Word 和 PDF 转成 HTML 并尽量保留原格式。这是一个常见需求,但 Word 和 PDF 格式差异大,所以处理方式也不同。我给你整理一个系统的方案,涵盖工具选择、示例代码和注意事项。
Java 实现 Word / PDF → HTML 并保留格式指南
1. Word → HTML
Word 包括两种格式:.doc(老版本)、.docx(新版本)。
1.1 推荐库
| 库 | 支持格式 | 优点 | 缺点 |
|---|---|---|---|
| Apache POI (HWPF / XWPF) | .doc / .docx | 免费、常用 | 保留复杂格式有限,表格、图片需要手动处理 |
| docx4j | .docx | 对 docx 支持好,保留样式、图片 | 依赖 XML,较复杂 |
| Aspose.Words for Java | .doc / .docx | 高保真,可直接转 HTML | 商业授权,需要付费 |
1.2 Apache POI 示例(.docx → HTML)
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class WordToHtml {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("example.docx");
XWPFDocument document = new XWPFDocument(fis);
FileOutputStream out = new FileOutputStream("output.html");
XHTMLOptions options = XHTMLOptions.create();
XHTMLConverter.getInstance().convert(document, out, options);
out.close();
fis.close();
System.out.println("Word 转 HTML 完成");
}
}
✅ 特点:
- 对段落、字体、表格基本保留
- 图片需要在
options中指定图片保存路径
options.setExtractor(new FileImageExtractor(new File("images")));
options.URIResolver(new BasicURIResolver("images"));
1.3 docx4j 示例
import org.docx4j.Docx4J;
import org.docx4j.convert.out.html.HtmlSettings;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import java.io.File;
import java.io.FileOutputStream;
public class Docx4jToHtml {
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File("example.docx"));
HtmlSettings htmlSettings = new HtmlSettings();
FileOutputStream os = new FileOutputStream("output.html");
Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
os.close();
System.out.println("Docx4j 转 HTML 完成");
}
}
✅ 特点:
- 对表格、样式、字体、段落支持比 POI 好
- 适合复杂 Word 文档
2. PDF → HTML
PDF 转 HTML 难度更高,因为 PDF 是页面级、非结构化文本。
2.1 推荐库
| 库 | 优点 | 缺点 |
|---|---|---|
| PDFBox | 免费,Apache | 保留格式有限,适合文本提取 |
| iText / OpenPDF | 文本 + 图片 | PDF 商业授权限制 iText |
| Aspose.PDF | 高保真,支持 CSS / 表格 / 图片 | 商业授权,需要付费 |
| pdf2htmlEX(工具,可调用命令行) | 高保真 | 需外部依赖 |
2.2 Apache PDFBox 示例(文本 + 图片)
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import java.io.File;
import java.io.FileWriter;
public class PdfToHtml {
public static void main(String[] args) throws Exception {
PDDocument document = PDDocument.load(new File("example.pdf"));
PDFTextStripper stripper = new PDFTextStripper();
String text = stripper.getText(document);
FileWriter writer = new FileWriter("output.html");
writer.write("<html><body><pre>");
writer.write(text);
writer.write("</pre></body></html>");
writer.close();
document.close();
System.out.println("PDF 转 HTML 完成(文本)");
}
}
⚠️ 问题:
- PDFBox 提取文本,不保留 PDF 的复杂布局、表格、字体、图片
- 对格式要求高,需要结合 iText 或 pdf2htmlEX
2.3 iText 7 PDF → HTML(保留样式、图片)
import com.itextpdf.html2pdf.HtmlConverter;
import java.io.File;
import java.io.FileOutputStream;
public class ITextPdfToHtml {
public static void main(String[] args) throws Exception {
String pdfFile = "example.pdf";
String htmlFile = "output.html";
HtmlConverter.convertToHtml(new File(pdfFile), new FileOutputStream(htmlFile));
System.out.println("iText PDF → HTML 完成");
}
}
✅ 特点:
- 保留字体、颜色、表格、段落
- 商业用途需要购买 iText 许可证
3. 注意事项与优化
- Word 转 HTML
- 图片必须保存到外部路径,并在 HTML 中引用
- 表格样式复杂时,POI 转 HTML 效果可能不理想,docx4j 更稳定
- PDF 转 HTML
- PDF 是页面布局,HTML 是流式布局,完全保留格式很难
- 对复杂 PDF(多列、表格、公式),建议用 pdf2htmlEX 或 Aspose
- 字体兼容性
- 转 HTML 时,确保字体在目标环境可用,否则显示可能错位
- 编码
- 输出 HTML 时确保 UTF-8 编码,避免中文乱码
writer = new FileWriter("output.html", StandardCharsets.UTF_8);
- 图片存储路径
- 避免直接嵌入 Base64,文件大时会膨胀
- 图片建议单独存放,然后在 HTML 中引用
4. 推荐方案总结
| 源文件类型 | 免费方案 | 高保真方案 |
|---|---|---|
| Word (.docx) | Apache POI + POI-Converter | docx4j / Aspose.Words |
| Word (.doc) | HWPF + HTML 自行处理 | Aspose.Words |
| PDFBox 文本提取 | iText 7 / pdf2htmlEX / Aspose.PDF |
发表回复