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); } } } } }
全文完。
相关推荐
#### 四、Docx4j的使用方式 - **通过Maven集成**: Docx4j可以通过Maven来管理依赖,简化集成过程。 - **直接使用**: 如果不想使用构建工具,也可以直接下载Docx4j的JAR文件使用。 - **依赖管理**: Docx4j依赖于多个...
### Delphi 读写 Office Word DOCX 控件 DOCXReadWrite & AXWReport 开发帮助手册 #### 一、概述 Delphi 是一款流行的跨平台软件开发工具,它支持多种编程语言和技术栈。对于那些需要与 Microsoft Office 文档交互...
下面是一个简单的代码片段,展示了如何使用docx4j读取docx文件: ```kotlin val file = File("path_to_your_docx_file.docx") val packagePartSource = PackagePartSource(file.uri.toString()) val docxPackage = ...
"直接读取word到richTextBox"是一个常见的需求,它涉及到将Word文档的内容,包括格式和图片,实时地显示在richtextbox控件中。richtextbox是Windows Presentation Foundation(WPF)或Windows Forms中的一个组件,它...
DocX是一个开源的.NET库,它允许开发者在不使用Microsoft Office Interop的情况下对Word文档进行创建、读取和修改操作。这个组件为开发者提供了一种轻量级且高效的方式来处理DOCX格式的Word文档,尤其适合在服务器端...
这个“vb读取word小例子”提供了一种简单的方法来实现这一功能,通过一段简洁的代码,就能读取Word文档的内容并将其显示出来。下面,我们将详细探讨如何使用VB来操作Word文档,以及相关的知识点。 首先,要实现VB与...
总的来说,.NET下的Word控件为开发者提供了强大的工具,使得处理Word文档变得简单而高效。无论你是要进行批量处理、格式转换,还是构建一个基于Word的编辑器,这样的控件都能大大提升开发效率并降低维护成本。不过,...
导入Word文档内容通常涉及到读取DOC或DOCX文件。Word文档的存储格式是基于Open XML标准,我们可以使用Microsoft的Open XML SDK或者第三方库如NPOI来解析这些文件。通过解析Word文档,我们可以提取出文本、样式、段落...
在易语言中,编辑框(EditBox)通常用于接收或显示文本信息,而读取Word文档的内容则涉及到文件操作和文字处理。具体实现方法可能包括以下步骤: 1. **打开Word文档**:首先,我们需要调用易语言的系统API,例如`...
通过这些工具,我们可以读取Word文档的详细信息,并将这些信息转化为可读的字符串格式,存储到TXT文件中。在实际开发过程中,确保充分测试,以确保所有预期的功能都能正常工作,并且程序是健壮的。
delphi读取word Delphi写数据至WORD 所需的三个控件: TWordApplication; TWordDocument; TWordFont; 创建 打开 读取操作 对word表格进行读写
4. **读取和保存文档**:能够打开和读取DOC、DOCX等不同格式的Word文档,并将其保存到磁盘或其他存储介质。 5. **导出和转换**:支持将Word文档导出为PDF、HTML、XML等其他格式,满足跨平台的需求。 6. **宏支持**...
4. **读取内容**:通过`Content`属性获取文档内容,然后使用`text()`方法读取。 ```cpp QAxObject *content = document->querySubObject("Content"); QString text = content->dynamicCall("Text()").toString(); `...
本文将详细介绍如何在VS 2005中创建一个Windows应用程序,仅读取Word文档中的纯文本内容。 首先,确保你的系统上安装了Visual Studio 2005,并且安装了Microsoft Office,因为COM组件是基于Office的应用程序接口。...
1. **文件读取与解析**:控件首先需要能够读取Word文档(通常是.docx格式),解析文档结构,提取其中的图片数据。这涉及到对Office Open XML标准的理解和应用,因为.docx文件本质上是一个ZIP压缩包,包含XML文件和...
在开发过程中,有时我们需要在Qt应用中处理Microsoft Word文档,如读取、编辑或创建新的文档。虽然Qt本身并不直接支持这些功能,但它提供了一个叫做ActiveQt的框架,该框架使得Qt与ActiveX控件(如Microsoft Office...
Java Word控件-Free Spire.Doc for Java_2.0.0是一个强大的库,专为Java开发者设计,用于处理Microsoft Word文档。与Apache POI相比,它提供了更丰富的功能和更简便的API,使得在Java环境中操作Word文档变得更加高效...
PB调用Word,即PowerBuilder(PB)利用OLE(Object Linking and Embedding)技术来操作Microsoft Word应用程序,实现对Word文档的创建、编辑、读取等操作。在实际的IT开发中,这种技术常用于自动化办公流程或者将PB...
通常,导入操作涉及读取Word文档,而导出则涉及将文档内容写入新的文件格式。通过这些代码示例,开发者可以学习如何在自己的项目中集成Aspose.Word的功能。 4. **图片处理** 虽然"PicPath"是一个图片路径,但...