Java Docx文件简介和解析

Docx简介

  • 以Microsoft Office的doc/docx 为主要处理对象
  • Word2003和之前都是doc,文档格式不公开
  • Word2007和之后都是docx,文档格式公开,遵循XML路线
  • docx 为主要研究对象
    – 文字样式
    – 表格
    – 图片
    – 公式

Java对docx文件操作

  • 常见功能
    – docx解析
    – docx生成(完全生成,模板加部分生成:套打)
  • 处理的第三方库
    – Jacob,COM4J (基于Windows平台)
    POI, docx4j (纯Java的第三方库)
    – 一些其他平台的第三方库(OpenOffice/Libre Office SDK)linux平台
    – Aspose(收费)
    – 一些开源的OpenXML的包

POI

Apache POI

  • poi.apche.org
  • 可处理docx,xlsx,pptx,visio等office套件
  • 纯Java工具包,无需第三方依赖
  • 主要类
    – XWPFDocument 整个文档对象
    – XWPFParagraph 段落(以回车来定义的,并非文本上的段落)
    – XWPFRun 一个片段(字体样式相同的一段)
    – XWPFPicture 图片
    – XWPFTable 表格

读取docx文件 文本
docx整个文本对象,然后分为段落,段落分为片段,遍历进行判断,输出文本或者其他

public static void main(String[] args) throws Exception {
   
		readDocx();
	}

public static void readDocx() throws Exception {
   
		InputStream is;
		is = new FileInputStream("test.docx");
		XWPFDocument xwpf = new XWPFDocument (is);
		
		List<IBodyElement> ibs= xwpf.getBodyElements();
		for(IBodyElement ib:ibs)  //遍历文本的每一个段落
    	{
   
			BodyElementType bet = ib.getElementType();
			if(bet== BodyElementType.TABLE)
    		{
   
				//表格
				System.out.println("table" + ib.getPart());
    		}
			else
			{
   				
				//段落
				XWPFParagraph para = (XWPFParagraph) ib;
				System.out.println("It is a new paragraph....The indention is " 
				         + para.getFirstLineIndent() + "," + para.getIndentationFirstLine() );
				//System.out.println(para.getCTP().xmlText());
				
				List<XWPFRun> res = para.getRuns();  //段落再分为片段
				//System.out.println("run");
				if(res.size()<=0)
				{
   
					System.out.println("empty line");
				}
				for(XWPFRun re: res)  //遍历每一个片段
				{
   							
					if(null == re.text()||re.text().length()<=0)  //是图片
					{
   
						if(re.getEmbeddedPictures().size()>0)
						{
   
							System.out.println("image***" + re.getEmbeddedPictures().size());							
						} else
						{
   
							System.out.println("objects:" + re.getCTR().getObjectList().size());
							if(re.getCTR().xmlText().indexOf("instrText") > 0) {
   
								System.out.println("there is an equation field");
							}
							else
							{
   
								//System.out.println(re.getCTR().xmlText());
							}												
						}
					}
					else
					{
   						
						System.out.println("==="+ re.getCharacterSpacing() + re.text());
					}
				}				
			}
    	}		
		is.close();
	}

//输出
It is a new paragraph....The indention is -1,-1
===0我们是中国人,
===0 
===0C
===0hinese!
It is a new paragraph....The indention is 420,420
===0Hello ECNU! Hello China!
It is a new paragraph....The indention is -1,-1
empty line

docx中图片的读取操作

 public static void imageRead() throws IOException, InvalidFormatException {
   
        File docFile = new File("simple.docx");

        XWPFDocument doc = new XWPFDocument(OPCPackage.openOrCreate(docFile));
        
        int i = 0;
        for (XWPFParagraph p : doc.getParagraphs()) {
     
            for (XWPFRun run : p.getRuns()) {
   
            	System.out.println("a new run");
                for (XWPFPicture pic : run.getEmbeddedPictures()) {
     //有图片就进入for循环,没有会返回空
                	System.out.println(pic.getCTPicture().xmlText());
                	//image EMU(English Metric Unit)
                	System.out.println(pic.getCTPicture().getSpPr().getXfrm().getExt().getCx());
                	System.out.println(pic.getCTPicture().getSpPr().getXfrm()
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,我们可以使用XSLT(eXtensible Stylesheet Language Transformations)来解析.docx文件。.docx是Microsoft Word中使用的一种文件格式,其中包含文本、图像、表格和其他内容。以下是解析.docx文件的基本步骤: 1. 导入必要的Java类库和工具包:首先,我们需要导入一些Java类库和工具包,以便能够读取和解析.docx文件。这些类库和工具包包括Apache POI、Apache POI OOXML、Apache POI XMLBeans等。 2. 创建一个XSLT模板:XSLT模板是用于解析和转换XML文档的样式表。我们需要创建一个XSLT模板来解析.docx文件,并从中提取所需的数据。 3. 加载.docx文件:使用Apache POI库的XWPFDocument类,我们可以加载.docx文件。XWPFDocument类提供了许多用于读取和操作.docx文件的方法。 4. 将.docx文件内容转换为XML:使用XWPFWordExtractor类,我们可以将.docx文件内容提取为纯文本。然后,我们可以将提取的文本转换为XML格式,以便更容易地进行解析和处理。 5. 应用XSLT模板:使用Javajavax.xml.transform包中的类,我们可以将XSLT模板应用于XML文档。这将触发相应的转换和解析逻辑,从而解析和提取所需的数据。 6. 处理提取的数据:一旦数据被解析和提取,我们可以使用Java代码对其进行处理。可以将数据保存到数据库中、生成报告或进行其他操作,具体取决于需求。 综上所述,使用Java的XSLT功能,我们可以轻松解析和提取.docx文件中的数据。这种方法可以帮助我们自动化处理文档并快速获取所需的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值