`
53873039oycg
  • 浏览: 843811 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]Docx4j读取word 2007内容控件

 
阅读更多

       word 2007内容控件位置:

      

         代码如下:

        

import java.io.File;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBElement;

import org.docx4j.TextUtils;
import org.docx4j.TraversalUtil;
import org.docx4j.TraversalUtil.CallbackImpl;
import org.docx4j.XmlUtils;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;
import org.docx4j.wml.CTLock;
import org.docx4j.wml.CTSdtCell;
import org.docx4j.wml.ContentAccessor;
import org.docx4j.wml.Document;
import org.docx4j.wml.Id;
import org.docx4j.wml.SdtBlock;
import org.docx4j.wml.SdtPr;
import org.docx4j.wml.SdtPr.Alias;
import org.docx4j.wml.SdtRun;
import org.docx4j.wml.Tag;
import org.jvnet.jaxb2_commons.ppp.Child;

public class Docx4j_读取内容控件_S3_Test {
	public static void main(String[] args) throws Exception {
		Docx4j_读取内容控件_S3_Test t = new Docx4j_读取内容控件_S3_Test();
		t.printSdtContent("f:/saveFile/temp/kkk - 副本.docx");
	}

	public void printSdtContent(String filePath) throws Exception {
		WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage
				.load(new File(filePath));
		MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();
		Document wmlDocumentEl = (Document) mdp.getContents();
		Body body = wmlDocumentEl.getBody();
		SdtFinder sdtFinder = new SdtFinder();
		new TraversalUtil(body, sdtFinder);
		for (Child sdtChild : sdtFinder.sdtList) {
			if (sdtChild instanceof SdtRun) {
				SdtRun sdtRun = (SdtRun) sdtChild;
				SdtPr sdtPr = sdtRun.getSdtPr();
				printSdtPrContent(sdtPr);
				// System.out.println(XmlUtils.marshaltoString(sdtPr, true,
				// true));
				ContentAccessor sdtContent = sdtRun.getSdtContent();
				System.out.println("-----------p content="
						+ getContentAccessorContent(sdtContent));
			} else if (sdtChild instanceof CTSdtCell) {
				CTSdtCell sdtCell = (CTSdtCell) sdtChild;
				SdtPr sdtPr = sdtCell.getSdtPr();
				printSdtPrContent(sdtPr);
				ContentAccessor sdtContent = sdtCell.getSdtContent();
				System.out.println("-----------table content="
						+ getContentAccessorContent(sdtContent));
			} else if (sdtChild instanceof SdtBlock) {
				SdtBlock sdtBlock = (SdtBlock) sdtChild;
				SdtPr sdtPr = sdtBlock.getSdtPr();
				printSdtPrContent(sdtPr);
				ContentAccessor sdtContent = sdtBlock.getSdtContent();
				System.out.println("-----------sdtblock content="
						+ getContentAccessorContent(sdtContent));
			}
		}
	}

	// 没有解析样式
	public void printSdtPrContent(SdtPr sdtPr) {
		StringBuffer sb = new StringBuffer();
		List<Object> rprList = sdtPr.getRPrOrAliasOrLock();
		for (Object obj : rprList) {
			if (obj instanceof JAXBElement) {
				String eName = ((JAXBElement) obj).getName().getLocalPart();
				// 布尔类型特殊处理
				if ("temporary".equals(eName)) {
					sb.append(" 替换后是否删除内容控件:").append("是");
				}
				obj = XmlUtils.unwrap(obj);
				// System.out.println("------after="+ obj.getClass().getName());
				if (obj instanceof CTLock) {
					CTLock lock = (CTLock) obj;
					if (lock != null) {
						sb.append(" 锁定方式:").append(lock.getVal());
					}
				} else if (obj instanceof Alias) {
					Alias alias = (Alias) obj;
					if (alias != null) {
						sb.append(" 标题:").append(alias.getVal());
					}
				}
			} else if (obj instanceof Tag) {
				Tag tag = (Tag) obj;
				if (tag != null) {
					sb.append(" tag标记:").append(tag.getVal());
				}
			} else if (obj instanceof Id) {
				Id id = (Id) obj;
				if (id != null) {
					sb.append(" id:").append(id.getVal());
				}
			}
		}
		System.out.println(sb.toString());
	}

	public String getContentAccessorContent(ContentAccessor contentAcc)
			throws Exception {
		StringWriter stringWriter = new StringWriter();
		TextUtils.extractText(contentAcc, stringWriter);
		return stringWriter.toString();
	}
}

class SdtFinder extends CallbackImpl {
	List<Child> sdtList = new ArrayList<Child>();

	public List<Object> apply(Object o) {
		if (o instanceof javax.xml.bind.JAXBElement
				&& (((JAXBElement) o).getName().getLocalPart().equals("sdt"))) {
			sdtList.add((Child) XmlUtils.unwrap(o));
		} else if (o instanceof SdtBlock) {
			sdtList.add((Child) o);
		}
		return null;
	}

	// to setParent
	public void walkJAXBElements(Object parent) {
		List children = getChildren(parent);
		if (children != null) {
			for (Object o : children) {
				if (o instanceof javax.xml.bind.JAXBElement
						&& (((JAXBElement) o).getName().getLocalPart()
								.equals("sdt"))) {
					((Child) ((JAXBElement) o).getValue()).setParent(XmlUtils
							.unwrap(parent));
				} else {
					o = XmlUtils.unwrap(o);
					if (o instanceof Child) {
						((Child) o).setParent(XmlUtils.unwrap(parent));
					}
				}
				this.apply(o);
				if (this.shouldTraverse(o)) {
					walkJAXBElements(o);
				}
			}
		}
	}
}

    全文完。

 

  • 大小: 30.3 KB
分享到:
评论
1 楼 jahu 2015-12-16  
可以给一个dome吗?
doc4j 依赖 log4j,好烦。

相关推荐

    Docx4j Getting Start中文版

    #### 四、Docx4j的使用方式 - **通过Maven集成**: Docx4j可以通过Maven来管理依赖,简化集成过程。 - **直接使用**: 如果不想使用构建工具,也可以直接下载Docx4j的JAR文件使用。 - **依赖管理**: Docx4j依赖于多个...

    Delphi读写Office Word DOCX文档控件DOCXReadWrite & AXWReport开发帮助手册中英文对照版.docx

    ### Delphi 读写 Office Word DOCX 控件 DOCXReadWrite & AXWReport 开发帮助手册 #### 一、概述 Delphi 是一款流行的跨平台软件开发工具,它支持多种编程语言和技术栈。对于那些需要与 Microsoft Office 文档交互...

    Android读取并显示word文件的代码例子

    下面是一个简单的代码片段,展示了如何使用docx4j读取docx文件: ```kotlin val file = File("path_to_your_docx_file.docx") val packagePartSource = PackagePartSource(file.uri.toString()) val docxPackage = ...

    直接读取word到richTextBox

    "直接读取word到richTextBox"是一个常见的需求,它涉及到将Word文档的内容,包括格式和图片,实时地显示在richtextbox控件中。richtextbox是Windows Presentation Foundation(WPF)或Windows Forms中的一个组件,它...

    DocX.dll 开源WORD操作组件的开发说明文档.chm

    DocX是一个开源的.NET库,它允许开发者在不使用Microsoft Office Interop的情况下对Word文档进行创建、读取和修改操作。这个组件为开发者提供了一种轻量级且高效的方式来处理DOCX格式的Word文档,尤其适合在服务器端...

    vb读取word小例子

    这个“vb读取word小例子”提供了一种简单的方法来实现这一功能,通过一段简洁的代码,就能读取Word文档的内容并将其显示出来。下面,我们将详细探讨如何使用VB来操作Word文档,以及相关的知识点。 首先,要实现VB与...

    .NET下开发操作WORD时使用的WORD控件

    总的来说,.NET下的Word控件为开发者提供了强大的工具,使得处理Word文档变得简单而高效。无论你是要进行批量处理、格式转换,还是构建一个基于Word的编辑器,这样的控件都能大大提升开发效率并降低维护成本。不过,...

    基于WPF的richtextbox控件,按格式导入导出word文档内容

    导入Word文档内容通常涉及到读取DOC或DOCX文件。Word文档的存储格式是基于Open XML标准,我们可以使用Microsoft的Open XML SDK或者第三方库如NPOI来解析这些文件。通过解析Word文档,我们可以提取出文本、样式、段落...

    易语言编辑框直接读入word文档源码

    在易语言中,编辑框(EditBox)通常用于接收或显示文本信息,而读取Word文档的内容则涉及到文件操作和文字处理。具体实现方法可能包括以下步骤: 1. **打开Word文档**:首先,我们需要调用易语言的系统API,例如`...

    qt操作word

    通过这些工具,我们可以读取Word文档的详细信息,并将这些信息转化为可读的字符串格式,存储到TXT文件中。在实际开发过程中,确保充分测试,以确保所有预期的功能都能正常工作,并且程序是健壮的。

    delphi读取word

    delphi读取word Delphi写数据至WORD 所需的三个控件: TWordApplication; TWordDocument; TWordFont; 创建 打开 读取操作 对word表格进行读写

    一个很好用的.net word控件

    4. **读取和保存文档**:能够打开和读取DOC、DOCX等不同格式的Word文档,并将其保存到磁盘或其他存储介质。 5. **导出和转换**:支持将Word文档导出为PDF、HTML、XML等其他格式,满足跨平台的需求。 6. **宏支持**...

    QT读写word

    4. **读取内容**:通过`Content`属性获取文档内容,然后使用`text()`方法读取。 ```cpp QAxObject *content = document-&gt;querySubObject("Content"); QString text = content-&gt;dynamicCall("Text()").toString(); `...

    Vs 2005 + Com组件只读取Word文档中的纯文本内容源码

    本文将详细介绍如何在VS 2005中创建一个Windows应用程序,仅读取Word文档中的纯文本内容。 首先,确保你的系统上安装了Visual Studio 2005,并且安装了Microsoft Office,因为COM组件是基于Office的应用程序接口。...

    Word图片上传控件开发文档

    1. **文件读取与解析**:控件首先需要能够读取Word文档(通常是.docx格式),解析文档结构,提取其中的图片数据。这涉及到对Office Open XML标准的理解和应用,因为.docx文件本质上是一个ZIP压缩包,包含XML文件和...

    Qt对word文档操作 com实例

    在开发过程中,有时我们需要在Qt应用中处理Microsoft Word文档,如读取、编辑或创建新的文档。虽然Qt本身并不直接支持这些功能,但它提供了一个叫做ActiveQt的框架,该框架使得Qt与ActiveX控件(如Microsoft Office...

    Java Word控件-Free Spire.Doc for Java_2.0.0

    Java Word控件-Free Spire.Doc for Java_2.0.0是一个强大的库,专为Java开发者设计,用于处理Microsoft Word文档。与Apache POI相比,它提供了更丰富的功能和更简便的API,使得在Java环境中操作Word文档变得更加高效...

    PB调用word,打开word

    PB调用Word,即PowerBuilder(PB)利用OLE(Object Linking and Embedding)技术来操作Microsoft Word应用程序,实现对Word文档的创建、编辑、读取等操作。在实际的IT开发中,这种技术常用于自动化办公流程或者将PB...

    Aspose.Word控件

    通常,导入操作涉及读取Word文档,而导出则涉及将文档内容写入新的文件格式。通过这些代码示例,开发者可以学习如何在自己的项目中集成Aspose.Word的功能。 4. **图片处理** 虽然"PicPath"是一个图片路径,但...

Global site tag (gtag.js) - Google Analytics