2015-04-24 119 views
3

我们是否可以选择使用xwpfdocument从java中的.docx文件中删除图片?请回复我,因为我试图在过去一周内完成此操作。 代码尝试:删除.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 List pic = document.getAllPictures(); \t \t Iterator iterator = pic.iterator(); \t \t \t 如果\t(pic.size()> 0) \t \t \t {\t \t \t \t对(INT I = 0; I 运行= 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

如果你在哪里,你试图删除的项目#0呼叫的IndexOutOfBoundsException,那么你的名单显然是空的。因此,要么对Run对象中的所有图形进行空白检查,要么使用for循环 - 如果List<CTDrawing>为空,则该循环不会执行。

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); 
        } 

       }