Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache poi替换标头上的现有图片_Java_Ms Word_Apache Poi - Fatal编程技术网

Java Apache poi替换标头上的现有图片

Java Apache poi替换标头上的现有图片,java,ms-word,apache-poi,Java,Ms Word,Apache Poi,有并没有办法用ApachePOI替换word(docx)文件头上的图像(图像名称)?我在想: +--------------------------------+ +标题myimage.jpeg-+ +------正文-----------+ +--------------------------------+ replaceImage(“myimage.jpeg”,newPictureInputStream, “newPicture_name.jpeg”) 以下是我所尝试的: XWPF

有并没有办法用ApachePOI替换word(docx)文件头上的图像(图像名称)?我在想:

+--------------------------------+
+标题myimage.jpeg-+
+------正文-----------+
+--------------------------------+

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;
        }
    }
XWPFParagraph originalParagraph=null;
originalParagraph=getPictureParagraphInHead(lookingPictureName);
ListIterator it=originalParagraph.getRuns().ListIterator();
XWPFRun replacedRun=null;
while(it.hasNext()){
XWPFRun=it.next();
int runIDX=it.nextIndex();
如果(运行.getEmbeddedPictures().size()>0){
XWPFRun newRun=null;
newRun=newxwpfrun(run.getCTR(),(IRunBody)原始参数);
原始paragraph.addRun(newRun);
originalParagraph.removeRun(originalParagraph.getRuns().indexOf(run));
打破
}
}

我不确定您是否可以使用POI获取图像的“文件名”。它可能在XML中,因此您可能需要创建自己的方法来查找图像

要获取标题,请执行以下操作:

XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(doc); // XWPFDocument
XWPFHeader header = policy.getDefaultHeader();
要删除图像,请从段落(单元格/行/表..)中获取XWPFRun

CTR-CTR=myRun.getCTR();//
List images=ctr.getDrawingList();

对于(int i=0;我编写了一些代码,在文件中的文本上循环,查找您的魔术占位符,然后抓取内容并编写图像?任何其他前瞻性文章?因此,几个小时后,我不推荐使用此API(Apache POI)。它生成了损坏的文件。我只使用了框架方法。我看到了POI源代码,吓了一跳。请不要使用此框架或祝您好运。确保您使用的是最新版本的Apache POI。XWPF中损坏的Word文档不应该有任何问题!我使用了3.17。根据
CTR ctr = myRun.getCTR(); // 
List<CTDrawing> images = ctr.getDrawingList();
for (int i=0; i<images.size(); i++)
{
    ctr.removeDrawing(i);
}