【问题标题】:Add Footer(with Image) to Word Doc using POI API使用 POI API 将页脚(带图像)添加到 Word Doc
【发布时间】:2012-11-13 19:26:36
【问题描述】:

我面临以下情况和问题:

我必须检索现有的 .doc/.docx 文件并通过为包含图像和一些文本的文档的每一页添加页脚来修改它。我一直在尝试通过使用 Apache POI API 来实现这一点,但到目前为止我还没有运气。尽管我搜索了很多示例和指南,但我找到的那些只会让我更加失望。

由于价格昂贵,我放弃了 Aspose,所以我相信 POI API 将是实现这一目标的唯一途径。

我相信我使用 .doc 做的最接近的就是做这段代码,但它只创建没有文本的页脚部分,并使文档中的图像崩溃:

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("C:/testeF.doc"));
HWPFDocument doc = new HWPFDocument(fs);
//WordExtractor we = new WordExtractor(doc);
HeaderStories headerStories = new HeaderStories(doc);
Range rangeO = headerStories.getOddFooterSubrange();
if(rangeO == null)
    rangeO = headerStories.getRange();
rangeO.insertAfter("Footer text from POI");
FileOutputStream newdoc = new FileOutputStream("C:/output.doc");
doc.write(newdoc);
newdoc.close();

请问各位有没有什么建议可以解决这些问题?

【问题讨论】:

  • “使文档中的图像崩溃”是什么意思?你有例外吗?图片只是不显示吗?
  • 不解释是我的错,他们只是不再出现了。
  • 对导致此问题的原因有任何想法吗?
  • 您尝试使用什么版本的 POI?如果它不是最新的,您是否尝试过升级以查看它是否已解决?
  • 我使用的是最新的稳定版 POI(3.8)

标签: java ms-word apache-poi doc


【解决方案1】:

关于 .docx 文件(XWPF,不是 HWPF)的一些更新,我现在可以创建带有一些文本的页脚或将一些文本插入到现有页脚,但如果页脚已经存在,我只需将新文本附加到现有页脚一,我找不到覆盖它的方法。

例如: 现有页脚 = "测试"

执行以下代码后的页脚 = "TestTest"

Wanted result = "Test"(覆盖第一个“Test”页脚文本

String text = "Test";
    File docxFile = new File("C:/testeXWPF.docx");
    FileInputStream finStream = new FileInputStream(docxFile.getAbsolutePath());
    XWPFDocument doc = new XWPFDocument(finStream);

    XWPFHeaderFooterPolicy policy = doc.getHeaderFooterPolicy();
    if (policy == null) {
        policy = new XWPFHeaderFooterPolicy(doc);
    }

    CTP ctP1 = CTP.Factory.newInstance();
    CTR ctR1 = ctP1.addNewR();
    CTText t = ctR1.addNewT();
    t.setStringValue(text);
    XWPFParagraph codePara = new XWPFParagraph(ctP1);

    XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
    newparagraphs[0] = codePara;

    policy.createFooter(policy.DEFAULT, newparagraphs);

    FileOutputStream fileOut = new FileOutputStream(docxFile);

    doc.write(fileOut);

    fileOut.close();

目前,这仅适用于 docx 文件 (XWPF),但我必须想办法对 doc 文件 (HWPF) 做同样的事情。

有什么提示吗?

【讨论】:

  • 上面的例子不起作用,当我使用上面的代码修改代码然后得到错误,xml内容中的一些问题。
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 2018-08-17
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2020-09-01
相关资源
最近更新 更多