2015-04-07 1 views
0

У кого-нибудь есть идея удалить фотографии в .docx-файле? Я использую XWPFDocument и пробовал вот так. Пожалуйста помоги.Удалить изображение в .docx файле

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) 
+0

Вы рассказываете нам, что вы пробовали, но не то, что происходит: остались ли какие-то фотографии? Сделайте * любые * снимки удалены? Он висит? –

+0

Он выбросил ошибку ERROR [главная] (DocxUtil.java:303) - Пойманное: нулевой java.lang.UnsupportedOperationException \t в java.util.Collections $ UnmodifiableCollection.remove (Collections.java:1078) \t at com.test.util.DocxUtil.processImage (DocxUtil.java:296) \t at com.test.util.DocxUtil.main (DocxUtil.java:37) А также я не уверен, правильный ли мой подход или нет. Пожалуйста, посоветуйте мне, как действовать дальше. – Sherin

+0

Я пробовал этот код, и я получаю исключение 'UnsupportedOperationException' – LittlePanda

ответ

0

В этой строке:

runs.remove(piclist); 
  1. remove() не поддерживается в результате List<XWPFRun> getRuns(). Код POI Apache не поддерживает его. Вот почему вы получаете 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».

 Смежные вопросы

  • Нет связанных вопросов^_^