提问者:小点点

Apache poi替换标题上的现有图片


有什么方法可以用apache poi将word(docx)文件头上的图像替换为图像的名称吗?我正在考虑:

--------------------------------
HEADER myimage.jpeg-
-----------BODY------------
--------------------------------

replace("myimage. jpeg",newPictureInputStream,"newPicture_name.jpeg");

这里我尝试了:

    XWPFParagraph originalParagraph = null;
    originalParagraph = getPictureParagraphInHead(lookingPictureName);
    ListIterator<XWPFRun> it = originalParagraph.getRuns().listIterator();
    XWPFRun replacedRun = null;

    while (it.hasNext()) {
        XWPFRun run = it.next();
        int runIDX = it.nextIndex();
        if (run.getEmbeddedPictures().size() > 0) {
            XWPFRun newRun = null;
            newRun = new XWPFRun(run.getCTR(), (IRunBody) originalParagraph);
            originalParagraph.addRun(newRun);
            originalParagraph.removeRun(originalParagraph.getRuns().indexOf(run));
            break;
        }
    }

共1个答案

匿名用户

我不确定你是否能用POI得到图像的“文件名”。它可能在XML所以你可能必须自己制定查找图像的方法。

要获得Header,您需要:

XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(doc); // XWPFDocument
XWPFHeader header = policy.getDefaultHeader();

要删除图像,请从您的段落(单元格/行/表…)中获取XWPFRun

CTR ctr = myRun.getCTR(); // 
List<CTDrawing> images = ctr.getDrawingList();
for (int i=0; i<images.size(); i++)
{
    ctr.removeDrawing(i);
}