2015-04-24 3 views
3

У нас есть возможность удалить фотографии из .docx файл в java с помощью xwpfdocument? Пожалуйста, ответьте мне, так как я пытаюсь сделать это в течение прошлой недели. Код пытался:Удалить изображения в .docx файле

public static void imageProcess(XWPFDocument document) throws IOException 
    { 
     List<XWPFPictureData> pic=document.getAllPictures(); 
     Iterator<XWPFPictureData> iterator=pic.iterator();  
     if (pic.size()>0) 
     { 
      for (XWPFParagraph para : document.getParagraphs()) 
      { 
       List<XWPFRun> runs = para.getRuns(); 
       for(XWPFRun run : runs){ 
        run.getCTR().removeDrawing(0); 
       } 
      } 
      } 
     } 

Исключение:

Exception in thread "main" java.lang.IndexOutOfBoundsException 
    at org.apache.xmlbeans.impl.store.Xobj.removeElement(Xobj.java:2200) 
    at org.apache.xmlbeans.impl.store.Xobj.remove_element(Xobj.java:2230) 
    at org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.CTRImpl.removeDrawing(Unknown Source) 
    at com.util.DocxUtil.imageProcess(DocxUtil.java:326) 
    at com.util.DocxUtil.main(DocxUtil.java:60) 
+7

Если вы пытались сделать это в течение недели, пожалуйста ** состояние ** что вы пробовали. Таким образом, мы не будем тратить время на то, чтобы предлагать вещи, которые вы уже знаете, не работают. –

+0

Нет документации, в которой говорится о том, как удалить изображения из файла docx. Я сомневаюсь, что POI даже поддерживает удаление снимков. И единственный фрагмент, который я пробовал из какого-то вопроса, просто не работает. – LittlePanda

+0

public static void imageProcess (XWPFDocument document) throws IOException \t { \t \t Список pic = document.getAllPictures(); \t \t Итератор итератор = pic.iterator(); \t \t \t \t , если (pic.size()> 0) \t \t {\t \t \t \t \t для (INT I = 0; г бежит = para.getRuns(); \t \t \t \t для (XWPFRun бега: пробежки). { \t \t \t \t \t run.getCTR() removeDrawing (0); \t \t \t \t} \t \t \t} \t \t \t} \t \t} \t} – Sherin

ответ

2

Если вы получаете IndexOutOfBoundsException по вызову, где вы пытаетесь удалить пункт # 0, то ваш список, очевидно, пусто. Поэтому либо выполните проверку пустоты по всем чертежам вашего объекта Run, либо используйте цикл for, который не будет выполняться, если ваш пуст.

for (XWPFRun run : runs) { 
    CTR ctr = run.getCTR(); 
    List<CTDrawing> lst = ctr.getDrawingList(); 
    for (int i = 0; i < lst.size(); i++) { 
     ctr.removeDrawing(i); 
    } 
} 
0

Попробуйте это:

 for (XWPFRun run : paragraph.getRuns()) 
       { 
        CTDrawing [] arr = run.getCTR().getDrawingArray(); 

        for(int k=0; k<arr.length; k++) 
        { 
         run.getCTR().removeDrawing(k); 
        } 

       }