当前位置: 首页 > 知识库问答 >
问题:

使用java在.doc中添加图像和编辑头

师承弼
2023-03-14

我想编辑.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();
        }
    }
}

但它不工作,在执行下面的代码后,它无法打开显示错误的新文档。另外,我需要在文件中提供的框中添加pic。有没有人知道怎么做?

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

用java替换word文档模板中的变量

获取相同错误:

共有1个答案

鱼浩荡
2023-03-14

简短的答案很可能也很不幸:它行不通。

很长的答案是:

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

 类似资料:
  • 我想创建并添加编辑功能(),以编辑患者的姓氏、名、出生日期、长度和体重。换句话说,我希望能够在系统Id、姓氏、firtstname等中编辑患者。 我是Java的新手,我需要帮助,因为我被困住了,不知道如何继续。

  • “图像描摹”允许您将栅格图像(JPEG、PNG、PSD 等)转换为矢量图稿。利用此功能,您可以通过描摹现有图稿,轻松地在该图稿基础上绘制新图稿。例如,您可以使用“图像描摹”,将您已在纸面上画出的铅笔素描图像转换为矢量图稿。您可以从一系列描摹预设中选择预设来快速获得所需的结果。使用描摹预设描摹栅格图像之前和之后 A. 原稿图像 B. 使用不同预设的描摹结果  描摹图像 在 Illustrator 文

  • 问题内容: 我是Java的新手,并且遇到在applet面板中添加图像的问题。我的图像在同一文件夹中。我的小程序可见,没有任何问题,但仅不显示图像。 问题答案: 在接受一个构造函数假定字符串表示的路径和文件名。 只有受信任的applet可以访问,然后只能在客户端文件系统(而不是服务器)上访问。如果这是应用程序资源,则应位于服务器上,并且可以通过URL访问。 请注意,构造函数还将接受URL,而不是上面

  • 问题内容: 我正在使用来自sketch.js(http://intridea.github.io/sketch.js/)中的示例来绘制草图并将其保存为图像文件。 问题是我能够渲染后如何继续编辑草图图像? 任何建议或解决方案表示赞赏。 谢谢 问题答案:

  • 我是工作中使用POI的新手。现在我要用java中的POI来读取PPT中的条形图。我事先在其中添加了几个系列x,它们是条形图所属的excel的列标题。但我默认只能用POI读取前三列。另外,一旦我修改了条形图的列标题,或者想在只有三列的条形图中添加第四列(thar is, add a Color),当我打开PPT时,条形图无法编辑,表明条形图的节点损坏。那么有没有大师可以帮助谈论如何使用POI为条形图

  • 在 Dreamweaver 中添加、修改和删除标签库、标签、属性和属性值。设置标签库的属性。 Dreamweaver 中的标签库是包含特殊类型的标签以及有关 Dreamweaver 应如何设置标签格式的信息的集合。标签库提供有关 Dreamweaver 用于代码提示、目标浏览器检查、标签选择器和其它编码功能的标签的信息。使用标签库编辑器,您可以添加和删除标签库、标签、属性和属性值,可以设置标签库的