Apache POI Word - 生成文档

Last Modified: 2023/11/04

概述

本文将讲述如何创建并保存一个空白的 word 文档,另外本文会揭示 docx 文档背后的存储秘密,让你看清 docx 文档的真面目。

为什么选择 XWPF 而不是 HWPF

事实上,poi 提供了两套 api 处理 word 文档:

  • HWPF:它是 ”Horrible Word Processor format“ 的缩写。Horrible 翻译过来就是可怕的或者说恐怖的。这个名字本身就足以劝退,其它的不解释。这套 api 可用于生成 word 95 及以前的 Word 文档,一般后缀名为 .doc。
  • XWPF:它是”XML Word Processor Format “的缩写。这套 api 可用于生成 Word 2007 及之后的 Word 文档,一般后缀名为 .docx。

生成文档

生成一个空白文档很简单,创建一个 XWPFDocument 对象,然后调用 write 写到一个本地路径即可。

XWPFDocument document = new XWPFDocument();
document.write(new FileOutputStream("D:\\tmp\\simpledoc.docx"));
document.close();

上面为了突出重点,代码没有遵循最佳实践,正常情况下应该使用 try resource 来释放资源。

package net.verytools.tutorial;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.FileOutputStream;
import java.io.IOException;

public class CreateDoc {

  public static void main(String[] args) throws IOException {
    try (XWPFDocument doc = new XWPFDocument()) {
      try (FileOutputStream out = new FileOutputStream("D:\\tmp\\simpledoc.docx")) {
        doc.write(out);
      }
    }
  }

}

空白文档不空白

上面生成的文档在 'D:\tmp\simpledoc.docx' 路径下,打开该文档,可以看到文档中什么也没有,是一个空白文档。我们知道文档中不但可以放文字,还可以放图片、视频等,那么 Word 文档怎么存储这些内容的呢?

事实上,.docx 不过是个幌子,我们不妨将 .docx 改成 .zip,然后解压一下我们刚刚生成的文档。然后我们使用 vscode 打开解压的文件夹一探究竟。

如你所见,一个看似空白的文档其实由一堆 xml 构成的。其中 document.xml 是核心,包含了文档的主要内容,不过目前由于文档是空白的,因此这个文档中 <w:body/> 标签中什么内容都没有。

什么是 docx

docx 其实是包含一堆 xml 文件和媒体文件的压缩包。

总结

本文讲述了如何利用 poi api 来创建和保存文档,并揭示了 docx 文件的存储秘密,接下来我们逐步向文档中段落和其它内容。点这里直达下一篇:Apache POI Word - 段落

>> 返回目录

有问题吗?点此反馈!

温馨提示:反馈需要登录