使用Java:在MS Word文件中替换字符串

6
我们需要一个Java库来替换MS Word文件中的字符串。有人能提供建议吗?
5个回答

7
虽然Apache POI支持MS Word,但其效果并不好。除非是最基本的格式,否则加载和保存任何文件都可能会破坏布局。你可以尝试一下,也许对你有用。
还有一些商业库,但我不知道它们是否更好。
最近在类似需求上工作时,我只能使用DOCX格式,并打开ZIP容器,读取文档XML,然后用正确的文本替换我的标记。这对于替换简单的文本而没有段落等是有效的。
private static final String WORD_TEMPLATE_PATH = "word/word_template.docx";
private static final String DOCUMENT_XML = "word/document.xml";

/*....*/

final Resource templateFile = new ClassPathResource(WORD_TEMPLATE_PATH);

final ZipInputStream zipIn = new ZipInputStream(templateFile.getInputStream());
final ZipOutputStream zipOut = new ZipOutputStream(output);

ZipEntry inEntry;
while ((inEntry = zipIn.getNextEntry()) != null) {
    final ZipEntry outEntry = new ZipEntry(inEntry.getName());
    zipOut.putNextEntry(outEntry);

    if (inEntry.getName().equals(DOCUMENT_XML)) {
        final String contentIn = IOUtils.toString(zipIn, UTF_8);
        final String outContent = this.processContent(new StringReader(contentIn));
        IOUtils.write(outContent, zipOut, UTF_8);
    } else {
        IOUtils.copy(zipIn, zipOut);
    }

    zipOut.closeEntry();
}

zipIn.close();
zipOut.finish();

我不以此为豪,但它起作用了。


1
创意十足,虽然有些hackish的解决方案!对我来说完美地解决了问题。但是,你必须小心输入文档中标记的方式。有时候,Word会将标记关键字分成两个XML标签,例如:<tag>hello </tag><tag>world!</tag>。只要你在输入整个标记单词时不改变光标位置,看起来似乎可以正常工作。 - Michael

2
我建议使用Apache POI库: http://poi.apache.org/ 看起来它已经没有得到更新了,但它现在可能已经足够完整以满足您的需求。

0

试试这个链接: http://www.dancrintea.ro/doc-to-pdf/

除了可以替换 MS Word 文件中的字符串外,还可以: - 通过简化的 API(如 getCell(x,y) 和 setCell(x,y,string))读写 Excel 文件 - 隐藏 Excel 工作表(例如辅助计算) - 替换 DOC、ODT 和 SXW 文件中的图像 - 转换为:

doc --> pdf、html、txt、rtf xls --> pdf、html、csv ppt --> pdf、swf


0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接