1

我面临以下情况和问题:

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

请你们中的任何人提供任何解决这些问题的建议吗?

4

1 回答 1

0

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

有什么提示吗?

于 2012-11-14T18:08:28.863 回答