0

有人知道删除 .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);
        }
    }
}   

例外:

ERROR [main] (DocxUtil.java:303) - 
Exception Caught: null java.lang.UnsupportedOperationException at
java.util.Collections$UnmodifiableCollection.remove(Collections.java:1078) at 
com.test.util.DocxUtil.processImage(DocxUtil.java:296) at 
com.test.util.DocxUtil.main(DocxUtil.java:37)   
4

1 回答 1

0

在这一行:

runs.remove(piclist);
  1. remove()的结果不支持List<XWPFRun> getRuns()。Apache POI 代码不支持它。这就是您得到 UnsupportedOperationException 的原因。这是预期的行为。
  2. 您尝试List<XWPFPictureData>从 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++;
        }
    }
}

更重要的是:您的代码使用 Apache POI。你应该用“apache-poi”标记这个问题。

于 2017-09-14T16:05:39.170 回答