我正在完成一项任务,我必须从word文档中提取数据,主要是图像,表格和特殊文本(公式等)。
我可以保存从网上下载的word文件中的图像,但是当我将相同的代码应用到我的.docx文件时,它会给出错误。
相同的代码是
//create file inputstream to read from a binary file
FileInputStream fs=new FileInputStream(filename);
//create office word 2007+ document object to wrap the word file
XWPFDocument docx=new XWPFDocument(fs);
//get all images from the document and store them in the list piclist
List<XWPFPictureData> piclist=docx.getAllPictures();
//traverse through the list and write each image to a file
Iterator<XWPFPictureData> iterator=piclist.iterator();
System.out.println(piclist.size());
while(iterator.hasNext()){
XWPFPictureData pic=iterator.next();
byte[] bytepic=pic.getData();
int i=0;
BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytepic));
//captureimage(imag,i,flag,j);
if(imag != null)
{
ImageIO.write(imag, "jpg", new File("D:/imagefromword"+i+".jpg"));
}else{
System.out.println("imag is empty");
}
它给出了错误的格式错误。但我无法更改doc文件。 其次,对于上面的代码,如果我有一个以上的图像,当我保存这个比每次保存保存图像。假设我们有3个图像,那么它将保存3个图像,但这三个图像将是最新的图像。
任何帮助将不胜感激。
答案 0 :(得分:0)
没有实际错误,我只能猜测。 但是有两个POI实现HWPF和XWPF取决于您读取旧文档一或xml-new-one docx的word文档版本。通常,当您尝试使用错误的文档打开文档时会出现格式错误。 您还需要完整的poi-ooxml-schemas jar来阅读更复杂的文档。