使用POI API将页脚(带图像)添加到Word Doc

时间:2012-11-13 19:26:36

标签: java ms-word apache-poi doc

我面临以下情况和问题:

我必须检索现有的.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();

请问你们有什么建议解决这些问题吗?

1 个答案:

答案 0 :(得分:0)

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

例: 现有页脚=“测试”

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

通缉结果=“测试”(覆盖了第一个“测试”页脚文本

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)做同样的事情。

任何提示?