明白了,你想在 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. 注意事项与优化

  1. Word 转 HTML
    • 图片必须保存到外部路径,并在 HTML 中引用
    • 表格样式复杂时,POI 转 HTML 效果可能不理想,docx4j 更稳定
  2. PDF 转 HTML
    • PDF 是页面布局,HTML 是流式布局,完全保留格式很难
    • 对复杂 PDF(多列、表格、公式),建议用 pdf2htmlEXAspose
  3. 字体兼容性
    • 转 HTML 时,确保字体在目标环境可用,否则显示可能错位
  4. 编码
    • 输出 HTML 时确保 UTF-8 编码,避免中文乱码
writer = new FileWriter("output.html", StandardCharsets.UTF_8);

  1. 图片存储路径
    • 避免直接嵌入 Base64,文件大时会膨胀
    • 图片建议单独存放,然后在 HTML 中引用

4. 推荐方案总结

源文件类型免费方案高保真方案
Word (.docx)Apache POI + POI-Converterdocx4j / Aspose.Words
Word (.doc)HWPF + HTML 自行处理Aspose.Words
PDFPDFBox 文本提取iText 7 / pdf2htmlEX / Aspose.PDF