Java 删除.docx文件中的图片

Java 删除.docx文件中的图片,java,xwpf,Java,Xwpf,有没有人有办法删除.docx文件中的图片?我正在使用XWPFDocument,并且已经尝试过这样做。请帮忙 List<XWPFPictureData> piclist = document.getAllPictures(); for (int i = 0; i < piclist.size(); i++) { for (XWPFParagraph p : document.getParagraphs())

有没有人有办法删除.docx文件中的图片?我正在使用XWPFDocument,并且已经尝试过这样做。请帮忙

List<XWPFPictureData> piclist = document.getAllPictures();              
for (int i = 0; i < piclist.size(); i++)     
{
    for (XWPFParagraph p : document.getParagraphs())         
    {
        List<XWPFRun> runs = p.getRuns();
        if (runs != null)
        {
            runs.remove(piclist);
        }
    }
}   
在这方面:

runs.remove(piclist);
  • List getRuns()
    的结果不支持
    remove()
    。Apache POI代码不支持它。这就是为什么你会得到不支持的操作异常。这是预期的行为
  • 您尝试从XWPFRun列表中删除一个
    列表。它不能工作
  • 下面是运行良好的代码:

    for (XWPFParagraph par : document.getParagraphs()) {
        int pos = 0;
        while (pos < par.getRuns().size()) {
            XWPFRun run = par.getRuns().get(pos);
            if (run.getEmbeddedPictures().size() > 0) {
                par.removeRun(pos);
            } else {
                pos++;
            }
        }
    }
    
    <代码> >(xWPFEFPAR:Doop.GETBECTHSH()){ int pos=0; 同时(POS<PAR.Grruns)(siz()) XWPFRun运行= PAR.GeTruns.() 如果(运行.getEmbeddedPictures().size()>0){ 删除(POS); }否则{ pos++; } } }

    还有一点:您的代码使用ApachePOI。你应该用“ApachePOI”来标记这个问题。

    你告诉我们你尝试了什么,但没有告诉我们发生了什么:还有一些图片吗?有照片被删除吗?它挂起了吗?它抛出了错误[main](DocxUtil.java:303)-捕获到异常:null java.lang.UnsupportedOperationException位于java.util.Collections$UnmodifiableCollection.remove(Collections.java:1078),位于com.test.util.DocxUtil.processImage(DocxUtil.java:296),位于com.test.util.DocxUtil.DocxUtil.main(DocxUtil.java:37)而且我也不确定我的方法是否正确。请告诉我如何继续。我已经尝试了此代码,但我得到了一个
    不支持操作异常
    例外。我不确定我的方法是否正确。我试过了。但是没有起作用。抛出错误。请帮助我开展这项活动。请提供一些建议。
    for (XWPFParagraph par : document.getParagraphs()) {
        int pos = 0;
        while (pos < par.getRuns().size()) {
            XWPFRun run = par.getRuns().get(pos);
            if (run.getEmbeddedPictures().size() > 0) {
                par.removeRun(pos);
            } else {
                pos++;
            }
        }
    }