gpt4 book ai didi

java - 使用 java 在 .doc 中添加图像和编辑标题

转载 作者:行者123 更新时间:2023-12-02 03:22:08 25 4
gpt4 key购买 nike

我想编辑 .doc(word) 文档的标题。下面是我编写的代码:

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;

public class WordReplaceText {
public static final String SOURCE_FILE = "C:\\Users\\609650323\\Desktop\\Files\\Project\\GFAST\\surveyPack.doc";
public static final String OUTPUT_FILE = "C:\\Users\\609650323\\Desktop\\Files\\Project\\GFAST\\surveyPack2.doc";

public static void main(String[] args) throws Exception {
WordReplaceText instance = new WordReplaceText();
HWPFDocument doc = instance.openDocument(SOURCE_FILE);
if (doc != null) {
doc = instance.replaceText(doc, "${A}", "AField");
instance.saveDocument(doc, OUTPUT_FILE);

}

}

private HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText) {
Range r = doc.getRange();
for (int i = 0; i < r.numSections(); ++i) {
Section s = r.getSection(i);
for (int j = 0; j < s.numParagraphs(); j++) {
Paragraph p = s.getParagraph(j);
for (int k = 0; k < p.numCharacterRuns(); k++) {
CharacterRun run = p.getCharacterRun(k);
String text = run.text();
if (text.contains(findText)) {
run.replaceText(findText, replaceText);
}
}
}
}
return doc;
}

private HWPFDocument openDocument(String file) throws Exception {
URL res = getClass().getClassLoader().getResource(file);
HWPFDocument document = null;
if (res != null) {
document = new HWPFDocument(new POIFSFileSystem(new File(res.getPath())));
}else
document = new HWPFDocument(new POIFSFileSystem(new File(SOURCE_FILE)));
return document;
}

private void saveDocument(HWPFDocument doc, String file) {
try {
FileOutputStream out = new FileOutputStream(file);
doc.write(out);
} catch (IOException e) {
e.printStackTrace();
}
}
}

但它不起作用,执行以下代码后,无法打开显示错误的新文档。我还需要在文档中提供的框中添加图片。有谁知道如何做到这一点吗?

以下是我也尝试过的链接:

Replacing variables in a word document template with java

出现同样的错误:

enter image description here

最佳答案

简短的答案很可能但不幸的是:它不起作用。

长答案是:

HWPF 处于不完整状态,很多东西都不支持(我最后一次查看可能是在一年前)。 .doc 文件格式是一种复杂的二进制文件格式。许多表都包含指向文档中某些位置的条目。更改文档的一部分通常需要更新所有表格。有用于文本运行、文本框、书签、形状、表格(行和列)等的表格。如果幸运的话,您有一个非常简单的文档,并且大多数复杂的表格都不存在。但是,当您有形状、图像、文本框等时,您可能会遇到 HWPF 尚未/未正确支持的内容。输出通常是一个无效的 Word 文件,它会被 Word 拒绝(如果幸运的话),或者或多或少地使 Word 崩溃(可能需要重新启动计算机)。

(我为客户开发了一个自定义 HWPF 库,几年前解决了所有这些问题。因此我知道详细信息。)

替代方案

您可能需要查看 .docx 格式而不是 .doc。如果您可以安排获取 .docx 文件,则可以使用 XWPF,它的状态要好得多。

关于标题:据我所知,标题不在主文档中。您需要查看标题子文档。 (我相信这是XWPFHeader?)

关于java - 使用 java 在 .doc 中添加图像和编辑标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39468317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com