gpt4 book ai didi

java - HWPF-POI :The table insert into doc with poi hwpf is not visible

转载 作者:行者123 更新时间:2023-12-02 03:26:24 32 4
gpt4 key购买 nike

我想用poi在特定位置插入一个表格,表格生成了,但是我发现这个表格不可见。

使用 macOS 及其文本工具预览或编辑此文档时,可以看到文档中生成的表格,POI 也可以读取表格和内容。我本来打算上传4张图片来展示过程,但我只能发布2张图片,抱歉。

@Test
public void exportDoc() throws Exception {
FileInputStream readFile = new FileInputStream(new File(readDoc));
FileOutputStream replaceFile = new FileOutputStream(new File(replaceDoc));
HWPFDocument document = new HWPFDocument(readFile);
Table table = WordUtil.insertNewTable(document,"${table}");
insertTableInDoc(table);
document.write(replaceFile);
readFile.close();
replaceFile.close();
}

private Table insertNewTable(HWPFDocument doc, String sourceValue) {
Range range = doc.getRange();
Table table = null;
for (int i = 0; i < range.numSections(); ++i) {
Section s = range.getSection(i);
for (int x = 0; x < s.numParagraphs(); x++) {
Paragraph p = s.getParagraph(x);
if (p.text().contains(sourceValue)) {
//remove target text
range.replaceText(sourceValue, "");
table = p.insertTableBefore((short) 3, 3);
return table;
}
}
}
return table;
}

private void insertTableInDoc(Table table) {
int count = 1;
for (int rowNum = 0; rowNum < table.numRows(); rowNum++) {
TableRow tableRow = table.getRow(rowNum);
for (int colNum = 0; colNum < tableRow.numCells(); colNum++) {
TableCell cell = tableRow.getCell(colNum);
Paragraph paragraph = cell.getParagraph(0);
CharacterRun characterRun = paragraph.getCharacterRun(0);
characterRun.insertBefore("number: " + count++);
}
}
}
  1. the original doc

  2. the doc after table insert

PS:

我确信这不是microsoft for mac的问题,windows平台下doc中的生成表也不可见。

(第一次提问,如果有什么错误或者表达不清楚的地方请告诉我,我会及时修改,谢谢)

最佳答案

根据 HWPF 项目的当前状态,您在尝试将内容插入 .doc 文件时可能会运气不佳。最好的选择是使用不同的格式 (docx)。

过去一年我没有查看过 HWPF,所以我对 HWPF 当前状态的看法可能是错误的:

几年前,我正在为客户开发一个自定义 HWPF 库。该自定义库的主要目标是能够修改 .doc 文件,并且 Word 可以正确处理修改后的文件。因此我知道修改 .doc 文件有多少级别最终会失败。公共(public) HWPF 库无法处理 .doc 文件格式的许多方面的修改(文本框、两字节字符范围、形状文件、嵌套表……仅举几例)。

要正确处理修改,特定 .doc 文件的所有“功能”都必须受到库的支持。因此,当 .doc 文件中存在形状时,即使插入了简单的文本片段并且未触及形状,HWPF 也必须调整形状的位置表。如果不处理形状,Word 在打开输出文件时会崩溃。

因此,如果可以的话,请使用 docx 或 rtf。如果可以的话,您可以尝试使用能够处理 .doc 文件的商业库之一。

关于java - HWPF-POI :The table insert into doc with poi hwpf is not visible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38823970/

32 4 0