1

我正在尝试在 MS Word 文档中的现有表中添加一个新行。我使用 POI 3.10,hwpf 库。但执行此程序后,文件崩溃,MS Word 出现警告信息。所有内容看起来都很奇怪,而且没有格式化。

示例如下:

InputStream fin = new FileInputStream(args[0]);
    POIFSFileSystem fs = new POIFSFileSystem(fin);

    HWPFDocument doc = new HWPFDocument(fs);
    Range range = doc.getRange();

    range.getParagraph(269).insertAfter("TEST");
    doc.write(new FileOutputStream("SOME PATH"));

也许应该更新一些额外的东西(例如,SI、DSI),因为添加了新的 CharacterRun?

4

1 回答 1

2

HWPF 仅支持 Word97/2000 格式的 DOC 文件的简单变体。表格已经很重要了。如果 Word 拒绝了您使用库创建/修改的文件,那么您可能不走运。

前段时间,我为客户开发了一个基于 Apache 的 HWPF 代码库的自定义库。该自定义库增加了对许多功能的支持,并且可以可靠地编写 Word 文件。正确地做所有这些事情是一项艰巨的工作。因此,仅解决小问题是不可能的。你将不得不花费几个月的时间。

您可以选择在 Word 中创建空行并用 HWPF 填充它们吗?

编辑:可能的功能解决方法:

用标记预先填写表格:

+--------+-------------+------------------------------------+
| Rev 1  |  2014-01-01 | Created document                   |
+--------+-------------+------------------------------------+
| Rev 2  |  2014-01-02 | Corrected flow chart               |
+--------+-------------+------------------------------------+
| $REVMRK|  $REVDATE## | $REVTEXT########################## |
+--------+-------------+------------------------------------+
| $REVMRK|  $REVDATE## | $REVTEXT########################## |
+--------+-------------+------------------------------------+
| $REVMRK|  $REVDATE## | $REVTEXT########################## |
+--------+-------------+------------------------------------+
| $REVMRK|  $REVDATE## | $REVTEXT########################## |
+--------+-------------+------------------------------------+

确保标记足够长。(在 HWPF 中添加文本,以便在表格中更改段落地址可能会造成麻烦。)

要填充一行,请执行以下操作:

  1. 找到一行的标记集
  2. 每个标记必须包含所有后续的#字符
  3. 准备好要为每个标记填写的文本
  4. 确保您的文本仅使用 ASCII 字符(见下文)
  5. 确保您的文本不长于修订标记
  6. 用新内容填充修订标记,并用空格填充剩余的#字符

如果软件没有找到新行,则必须有人在 Word 中添加新行模板。

一些限制的原因:

不插入:很多东西都与地址一起存储到文本流中(很多内部额外的表,其中包含对文本内容的地址引用)。这适用于段落边框、字符格式、表格标记、书签、图形参考等。有些东西被 HWPF 覆盖,很多东西没有。如果您插入文本,地址可能会发生变化,并且 Word 文件可能会损坏。

ASCII 范围:文本序列存储为每个字符 1 个字节或每个字符 2 个字节。如果操作正确,在 1 字节范围内插入非 ASCII 字符需要将该范围转换为 2 字节范围。这在 HWPF 中并不总是很好,它会导致地址转移(参见上面的“无插入”)。

如果您的文档“更简单”,您可能会摆脱一些限制。例如:没有文本框更好。没有嵌入的图纸更好。没有嵌套表更好。但是,通常限制非常严格,您也可以使用纯文本文档并为其提供 .doc 扩展名。

如果您需要更多详细信息,请告诉我。

于 2014-07-13T14:37:21.213 回答