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

问题描述:

有没有办法用apache poi将图像名称替换为单词(docx)文件标题上的图像?我正在考虑:Apache poi替换标题上的现有图片

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

replaceImage(“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; 
     } 
    } 
+0

写一些代码,循环通过文件中的文字,寻找您的魔术占位符,然后抓取内容并写入图像? – Gagravarr

+0

任何其他前瞻性帖子? – Zaosz

+0

所以几个小时后,我不推荐这个API(Apache POI)。它产生了损坏的文件。我只使用框架方法。我看到POI源代码,我吓坏了。不要使用这个框架或祝你好运。 – Zaosz

我不知道,如果你能得到与POI图像的“文件名”。它可能在XML中,因此您可能必须制定自己的方法来查找图像。

为了让你做的标题:

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); 
}