Apache POI HTML转Word与PDF功能实现

HTML 的自动转 Word 和 PDF 的需求,多 Java 项目都绕不开,是搞文档导出的。Apache POIpd4ml这俩库用下来还挺顺手的,基本能覆盖大部分场景。

Apache POI主要是搞 Word 那一块。你只要在pom.xml里加上poipoi-ooxml的依赖,写个几行代码,就能把 HTML 字符串写进.docx文档里了。虽然不能直接解析 HTML 结构,但配合下Jsoup做点预,样式和结构能保得比较好。

public void htmlToWord(String html, String outputPath) {
  XWPFDocument doc = new XWPFDocument();
  XWPFParagraph p = doc.createParagraph();
  XWPFRun run = p.createRun();
  run.setText(html); // 简单示例,复杂 HTML 得加解析
  try (OutputStream out = new FileOutputStream(outputPath)) {
    doc.write(out);
  } catch (IOException e) {
    e.printStackTrace();
  }
}

pd4ml那边就直接一点,转 PDF 挺方便。它本身就吃 HTML 结构,设置下页面大小,路径搞定后直接扔进去就能出 PDF。要是有乱码,那率是没加字体路径,记得用setFontPath指定下字体目录。

public void htmlToPdf(String html, String outputPath) {
  PD4ML pd4ml = new PD4ML();
  pd4ml.setPageWidth(595);
  pd4ml.setPageHeight(842); // A4 尺寸
  try (FileOutputStream fos = new FileOutputStream(outputPath)) {
    pd4ml.convertHtml(html, fos);
  } catch (Exception e) {
    e.printStackTrace();
  }
}

乱码问题时,字体和编码是关键。UTF-8一定要统一,另外你也可以在启动参数里加上poicharset.default来保证POI那边不会搞错字符集。

,这两套方案配合用,比较适合搞 Java 后台导出文档的场景。如果你经常要做报表、模板套打之类的,强烈建议试试。

rar 文件大小:27.12MB