java poi word2007_java使用poi解析2007以上的word文档中的表格与图片

项目中使用到了要解析word文档中的表格与图片,网上的2003的解析方式很多,2007以上的很少,我看了官网找了资料自己写了一个简单的解析方案,大家共同学习吧!有不对的地方希望大神指教!

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.usermodel.CharacterRun;

import org.apache.poi.hwpf.usermodel.Paragraph;

import org.apache.poi.hwpf.usermodel.Picture;

import org.apache.poi.hwpf.usermodel.Range;

import org.apache.poi.hwpf.usermodel.Table;

import org.apache.poi.hwpf.usermodel.TableCell;

import org.apache.poi.hwpf.usermodel.TableIterator;

import org.apache.poi.hwpf.usermodel.TableRow;

public class FileRead {

private static String filenamess;

private static Object String;

public static void main(String[] args) {

/***********************office word 2007版本以上解析********************************/

File file = new File("C:/Users/wangshuaifei/Desktop/test.doc");

String imagePath = "C:/Users/wangshuaifei/Desktop/pic";

try {

File file = new File("C:/Users/wangshuaifei/Desktop/word.docx");

String imagePath = "C:/Users/wangshuaifei/Desktop/pic";

OPCPackage oPCPackage = POIXMLDocument.openPackage(file.getPath());

XWPFDocument xwpf = new XWPFDocument(oPCPackage);

//获取页面中的表格

Iterator it = xwpf.getTablesIterator();

while(it.hasNext()) {

//循环页面中的表格

XWPFTable table = (XWPFTable) it.next();

//此表格中共有多少行,包括嵌套的总行数

int rcount = table.getNumberOfRows();

System.out.println(rcount);

StringBuffer str = new StringBuffer();

for (int i = 0; i 

//获取表格中的行

XWPFTableRow row = table.getRow(i);

//获取行中共有多少列

List cells = row.getTableCells();

for (int c = 0; c 

//获取列

XWPFTableCell cell = cells.get(c);

//System.out.println("Paragraphs:----"+cell.getParagraphs().size());

//获取列中的段落

for (int j = 0; j 

//获取段落中的字符,包括空格(有待验证,我也不是很理解),每个字符为一个XWPFRun对象

List runs = cell.getParagraphs().get(j).getRuns();

for (int j2 = 0; j2 

//获取单个对象

XWPFRun r = runs.get(j2);

//获取字符,此位置不知道干嘛用的,0和-1都能用

String text = r.getText(r.getTextPosition());

str.append(text);

//System.out.println(text);

System.out.println(r.getUnderline().toString());

System.out.println(r.getSubscript().toString());

System.out.println(r.getFontFamily());

System.out.println(r.getFontSize());

System.out.println(r.isBold());

System.out.println(r.getColor());

//如果字符为空,可能是附件一类的文件,比如图片之类的,需要另外解析,此处处理为图片

if(text == null) {

List piclist = r.getEmbeddedPictures();

for (int k = 0; k 

XWPFPicture pic = piclist.get(k);

//pic.getPictureData().getData();

byte[] picbyte = pic.getPictureData().getData();

//将图片写入本地文件

FileOutputStream fos = new FileOutputStream(imagePath +"/"+ file.getName()+j +".jpg");

fos.write(picbyte);

System.out.println("EmbeddedPictures:----"+r.getEmbeddedPictures().size());

}

}

}

str.append("\n");

}

}

}

System.out.println(str.toString());

}

oPCPackage.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值