我们是否可以选择使用.docx
从java中的xwpfdocument
文件中删除图片?因为我试图在过去一周内做这件事,请回复我。
代码尝试了:
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)
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
试试这个:
for (XWPFRun run : paragraph.getRuns())
{
CTDrawing [] arr = run.getCTR().getDrawingArray();
for(int k=0; k<arr.length; k++)
{
run.getCTR().removeDrawing(k);
}
}