docx4j 入门

这份文件的最新版本总是可以找到 docx4j svn in /docs (在 Flat OPC XML 格式为Word 2007, HTML ,和 PDF )。

这份文件是从英文翻译使用谷歌翻译。 如果你能提高翻译,请随时发送给你的改进版。 对于最近的报告,总是指英文版本。

什么是 docx4j?

docx4j 是一个解压的docx一个“一揽子”库,并解析WordprocessingML XML创建一个内存中的代表性 Java 。 最新版本的 docx4j 也支援PowerPoint pptx文件。

它是在概念上类似于微软的OpenXML SDK,它是对的。NET。

docx4j 是开源的,可以按照Apache许可证(2版)。 作为一个开放源码项目,欢迎踊跃投稿。 请参阅 docx4j 论坛 http://dev.plutext.org/forums/ 了解详情。

docx4j 严重依赖 JAXB,XML绑定的Java JCP标准。 你能想到的 docx4j 作为一个JAXB的实施除其他():

* 打开包装公约

* WordprocessingML(docx)的,开放的XML部分

* Presentation ML (pptx) part of OpenXML

该库是为了圆100%保真度之行docx文件,支持所有2007 WordML中。 为新的Word 2010功能的支持我们会尽快添加。

该 docx4j 项目是由 Plutext (www.plutext.com )。

是 docx4j 为你?

docx4j 负责处理的docx文件(和pptx介绍)在爪哇。

这不是旧的二进制(。doc)格式文件。 针对这一情况,看看在Apache的POI的HWPF。 (事实上, docx4j 使用基本转换HWPF。文件,以。docx)的

它也不是为RTF文件。

如果你要处理的。NET平台的docx文件,你应该看看微软的OpenXML SDK的代替。

一种替代方法 docx4j 是Apache的POI。 我特别建议,对于处理Excel文件。 它也可以用来处理Word文档,而且由于它使用XMLBeans的(不使用JAXB)它可能是一个更好的选择,如果你想使用XMLBeans。

什么样的事情可以做各种各样 docx4j?

* 打开现有的docx文件系统(从SMB / CIFS通讯,使用WebDAV的VFS的)

* 创建新的docx

* 编程操作(当然docx文档)

* Template substitution; CustomXML binding

* 导入二进制文档(使用Apache的POI HWPF)

* 生产/消费的Word 2007的xmlPackage(封装)格式

* 保存的docx,以文件系统作为一个的docx(即压缩),或的JCR(解压)

* 申请转换,包括常用的过滤器

* 导出为HTML或PDF

* 漫射/比较文件,段落或特殊和差别待遇(内容控制)

* 支持字体(字体替换,文件中使用嵌入任何字体)

项目使用 docx4j

Docx4all是基于Swing的文字处理器。

Plutext Word 2007的协作使用 docx4j 在服务器上,以切碎成更小的字,可独立版本件文件。

请联系Plutext如果您希望您的项目在这里列出。

什么它支持Word文档?

docx4j 可以读/写或Word 2007中,或已安装该兼容包的早期版本创建的docx文件。

相关零件 docx4j 从ECMA的生成模式。

它不能读/写的Word 2003 XML文档。 与这些主要问题是,XML命名空间是不同的。

docx4j 支持的Word 2010的docx文件。

运用 docx4j 二进制文件

你可以下载最新版本 docx4j 从 http://dev.plutext.org/docx4j/

一般来说,我们建议您开发的最新正式发布以来针对目前每晚构建,往往是几个个月大。

支持jar文件中可以找到的。tar.gz的版本,或者在有关的子目录。

运用 docx4j 通过 Maven

Maven POM 可在 http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/m2/org/docx4j/docx4j

JDK版本

你需要使用 Java 1.5+。

这是因为JAXB的 1 。 如果您必须使用1.4,retrotranslator可以 使据说 它的工作。

关于JAXB的字

docx4j 使用JAXB的马歇尔和unmarshall在WordprocessingML文档中的关键部件,包括主要文件的一部分,风格的一部分,主题的一部分,性能部分。

JAXB是包含在Sun的Java 6中的分布,而不是1.5。 因此,如果您使用的是1.5的JDK,你将需要在您的类路径的JAXB 2.1.x。

位的 docx4j如 org.docx4j.wml 和 org.docx4j.dml 产生了使用JAXB的XJC。 我们修改了,特别是wml.xsd模式,使产生的关键类是多一点人友好的(即不是所有的CT_和ST_开始)。

Log4j的

docx4j 使用log4j的日志记录。 要启用日志记录,您需要在您的类路径log4.properties或log4j.xml。 例如见 http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/resources/log4j.xml

Javadoc

网上浏览或下载Javadoc中,可以发现在目录 http://dev.plutext.org/docx4j/

docx4j 源代码

要获取该电流源代码的副本:

svn co http://dev.plutext.org/svn/docx4j/trunk/docx4j docx4j

或者,你可以浏览它的在线,网址为:

http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/

建筑 docx4j 从源

命令行 - 快捷操作

“快”,即只要你有Maven和Ant安装。 请注意,我们只是使用Maven来获取依赖,不求实际的建设。

创建一个目录称为工作区,和CD进去。

svn co http://dev.plutext.org/svn/docx4j/trunk/docx4j docx4j

开放的pom.xml,找到一行字:

<systemPath>/usr/lib/jvm/java-6-sun/jre/lib/rt.jar</systemPath>

并编辑它来适应你的系统。

mvn install

ant dist

这ant命令将创建docx4j.jar并把它和所有在dist目录的依赖关系。

日食

先决条件

* Eclipse的安装

* 安装一个Eclipse插件,例如颠覆 http://subclipse.tigris.org/update_1.2.x

* 安装 Maven and the Eclipse plugin

而且,正如上面讨论:

* Java 1.5或6

* JAXB的: 既 包括执行的JAXB的Java 6中, 并 在2.x的参考实现。 (这是运行时的价格支持功能)

说明

* File > New "Project .." > SVN > Checkout Projects from SVN

* 创建一个新的存储库的位置;网址是 http://dev.plutext.org/svn/docx4j

* 点击文件夹 "trunk",并选择docx4j;点击下一步

* 您要检查它作为一个项目配置使用新建项目向导

* 然后选择Java> Java项目,请点击下一页

* 选择一个项目名称(例如,'docx4j'),然后单击下一步

* 点击完成(我们将定义的Java构建步骤设置在后面)

经过其他对话框的情侣,你应该在你的工作区的新项目。

现在,我们需要配置 类路径 的Eclipse等内,以便它可以建立。

* 生成路径>“配置构建路径> Java构建路径>源标签

* 点击钢骨混凝土,然后按删除按钮

* 然后点击“添加文件夹”,并浏览到src /主/ Java和剔的Java'

* 然后添加 src/svg, src/diffx and src/pptx4j/java 以及

在Maven位:

* 请确保您有安装Maven和它的插件-见上面的先决条件。

* 安装在运行mvn docx4j 你从命令提示符(以防万一)

* 合适的项目点击>的Maven 2>“启用

该项目现在应该在Eclipse工作没有错误2 。

打开一个现有的docx文件

org.docx4j.openpackaging.packages. WordprocessingMLPackage 代表一个docx文档。

要加载的文件,所有您需要做的是:

WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new java.io.File(inputfilepath));

这种方法还可以加载平板的OPC XML文件。

然后,您可以得到的主要文件的一部分(字/ document.xml):

MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();

在此之后,您可以操作的内容。

WordML中的概念

要做到这远远超出任何事情,你需要有一个基本的WordML中概念的理解。

根据微软开放包装规格,每个的docx文件是由一个部分文件的数量,压缩了。 通常是XML的一个部分,但未必是(1图像的一部分,例如,是不是)。

一个WordML中介绍了文件的范围超出了这一点。 你可以找到一个非常可读引入1日 第3版(底漆)在 http://www.ecma-international.org/publications/standards/Ecma-376.htm 或 http://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm (一更好的联系,因为它不是压缩了)。

JAXB的:编组和解组

docx4j 包含一个类代表每个部分。 例如,有一个 MainDocumentPart 类。 XML的部分继承 JaxbXmlPart ,其中包含一个成员叫 jaxbElement。 当你要处理的一个部分的内容,你的工作与jaxbElement。

当你打开一个docx文档使用 docx4j, docx4j 自动 反编排 的XML部分的内容每到一个强类型的Java对象树( jaxbElement)。

同样,如果/当你告诉 docx4j 保存为这些Java对象的docx, docx4j 自动 纠察 的 jaxbElement 在每一部分。

有时候你会希望自己的东西编组或解组。 类 org.docx4j.jaxb.Context 定义了所有的用于JAXBContexts docx4j:

Jc

org.docx4j.wml
org.docx4j.dml

org.docx4j.dml.picture

org.docx4j.dml.wordprocessingDrawing

org.docx4j.vml
org.docx4j.vml.officedrawing

org.docx4j.math

jcThemePart

org.docx4j.dml

jcDocPropsCore

org.docx4j.docProps.core

org.docx4j.docProps.core.dc.elements

org.docx4j.docProps.core.dc.terms

jcDocPropsCustom

org.docx4j.docProps.custom

jcDocPropsExtended

org.docx4j.docProps.extended

jcXmlPackage

org.docx4j.xmlPackage

jcRelationships

org.docx4j.relationships

jcCustomXmlProperties

org.docx4j.customXmlProperties

jcContentTypes

org.docx4j.openpackaging.contenttype

jcPML

org.docx4j.pml
org.docx4j.dml

org.docx4j.dml.picture

建筑

docx4j 有3个层次:

1。 org.docx4j.openpackaging

OpenPackaging处理层次的东西在开放式打包约定:解压缩1到的docx WordprocessingMLPackage 和一个第二部分设置继承的对象,允许部分被添加/删除;保存的docx

这一层本来是基于OpenXML4J(也是由Apache POI的使用)。

一般子类零件 org.docx4j.openpackaging.parts.JaxbXmlPart

零件都被排列在一棵树上。 如果部分后裔,将有 org.docx4j.openpackaging.parts.relationships.RelationshipsPart 其中确定的后裔部分。 该示例PartsList(见下一节)告诉您如何工作的。

阿JaxbXmlPart有一个内容树:

public Object getJaxbElement() {
return jaxbElement;
}

public void setJaxbElement(Object jaxbElement) {
this.jaxbElement = jaxbElement;
}

2。 在 JAXB的 内容树 是分层模型的第二个级别3。

大部分地区(包括MainDocumentPart,样式,页眉/页脚,注释, 尾注 /脚注)的使用 org.docx4j.wml (WordprocessingML); WML的 提述 org.docx4j.dml 图形处理(DrawingML)作为必要的。

这些类都从打开XML模式

3。 org.docx4j.model

这个软件包的基础上降低2层,提供额外的功能,并正在逐步进一步发展。

样品

该封装org.docx4j.samples包含例子如何做事与 docx4j。 这些措施包括:

基础知识

* CreateWordprocessingMLDocument

* DisplayMainDocumentPartXml

* OpenAndSaveRoundTripTest

* OpenMainDocumentAndTraverse

输出/转型

* CreateHtml

* CreatePdf

扁平的OPC XML的

* ExportInPackageFormat

* ImportFromPackageFormat

图像处理

* AddImage

* ConvertEmbeddedImageToLinked

第一部分处理

* CopyPart

* ImportForeignPart

* PartsList

* StripParts

杂项

* CompareDocuments

* CreateDocxWithCustomXml

* CustomXmlBinding

* DocProps

* Filter

* HyperlinkTest

* NumberingRestart

* UnmarshallFromTemplate

如果您安装了源代码,你就会有这个包了。

如果你没有,你可以浏览它的在线,在

http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/java/org/docx4j/samples

此外,还有各种 样本文件 在/采样docs目录,这些是最容易通过检查进行访问 docx4j 使用svn。

零件清单

为了更好地了解如何 docx4j 工程和一个docx文档的结构你可以运行 PartsList 样本上的docx(或pptx)。 如果这样做,它会列出包层次结构,在部分地区采用。 它会告诉你哪个类是用来表示每个部分,如该部分是一个JaxbXmlPart,它还会告诉你什么阶层的 jaxbElement 的。

例如:

Part /_rels/.rels [org.docx4j.openpackaging.parts.relationships.RelationshipsPart]
containing JaxbElement:org.docx4j.relationships.Relationships

Part /docProps/app.xml [org.docx4j.openpackaging.parts.DocPropsExtendedPart]
containing JaxbElement:org.docx4j.docProps.extended.Properties

Part /docProps/core.xml [org.docx4j.openpackaging.parts.DocPropsCorePart]
containing JaxbElement:org.docx4j.docProps.core.CoreProperties

Part /word/document.xml [org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart]
containing JaxbElement:org.docx4j.wml.Document

Part /word/settings.xml [ org.docx4j.openpackaging.parts.WordprocessingML .DocumentSettingsPart]
containing JaxbElement:org.docx4j.wml.CTSettings

Part /word/styles.xml [ org.docx4j.openpackaging.parts.WordprocessingML .StyleDefinitionsPart]
containing JaxbElement:org.docx4j.wml.Styles

Part /word/media/image1.jpeg [ org.docx4j.openpackaging.parts.WordprocessingML .ImageJpegPart]

遍历的docx

OpenMainDocumentAndTraverse.java 在样本目录显示您如何遍历一个的docx JAXB的代表性。

关于JAXB的一个恼人的东西,是一个对象说一个表可以表示为 org.docx4j.wml.Tbl (如您所期望的)。 或者它可能被包装在一个 javax.xml.bind.JAXBElement在这种情况下,我得到了真正的表,你必须做的是这样的:

if ( ((JAXBElement)o).getDeclaredType().getName().equals( "org.docx4j.wml.Tbl" ) )

org.docx4j.wml.Tbl任务型=(org.docx4j.wml.Tbl)((JAXBElement)海外)。的getValue();

创建一个新的docx

要创建一个新的docx:

/ /创建包

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

/ /保存它

wordMLPackage.save(new java.io.File("helloworld.docx") );

就是这样。

createPackage() 是一个方便的方法,它的作用:

/ /创建包

WordprocessingMLPackage wordMLPackage = new WordprocessingMLPackage();

/ /创建主文档的一部分(字/ document.xml)

MainDocumentPart wordDocumentPart = new MainDocumentPart();

/ /创建主文档的一部分内容

ObjectFactory factory = Context.getWmlObjectFactory();

org.docx4j.wml.Body body = factory .createBody();

org.docx4j.wml.Document wmlDocumentEl = factory .createDocument();

wmlDocumentEl.setBody(body);

/ /把在部分内容

wordDocumentPart.setJaxbElement(wmlDocumentEl);

/ /添加主文档的一部分包关系

/ /(创造,如果有必要)

wmlPack.addTargetPart(wordDocumentPart);

添加一段文字

MainDocumentPart 包含一个方法:

public org.docx4j.wml.P addStyledParagraphOfText(String styleId, String text)

您可以使用该方法添加一个段落,使用指定的样式。

我们正在寻找的XML创建将是这样的:

< w:p xmlns:w ="http://schemas.openxmlformats.org/wordprocessingml/2006/main" >
< w:r >
< w:t > Hello world </ w:t >
</ w:r >
</ w:p >

addStyledParagraphOfText 生成的JAXB对象结构的方式,并将其添加到文档中。

ObjectFactory factory = Context.getWmlObjectFactory();

/ /创建该段

org.docx4j.wml.P para = factory.createP();

/ /创建文本元素

org.docx4j.wml.Text t = factory.createText();

t.setValue(simpleText);

/ /创建运行

org.docx4j.wml.R run = factory.createR();

run.getRunContent().add(t);

para.getParagraphContent().add(run);

/ /现在我们添加到文档的正文段

Body body = this.jaxbElement.getBody();

Body.getEGBlockLevelElts().add(para)

或者,您可以通过编组XML的一段:

/ /假设字符串XML包含以上XML

org.docx4j.wml.P para = XmlUtils.unmarshalString(xml);

对于这个工作,你需要确保所有的命名空间中声明的字符串正确。

添加部分

如果你想添加一个新的风格的一部分? 具体方法如下:

/ /创建一个样式的一部分

StyleDefinitionsPart stylesPart = new StyleDefinitionsPart();

/ /填充它默认风格

stylesPart.unmarshalDefaultStyles();

/ /添加样式的一部分主文档部分的关系

wordDocumentPart.addTargetPart(stylesPart);

你会采取同样的方法添加页眉或页脚。

当您添加一个这样的一部分,它会自动添加到源部分的关系的一部分。

一般来说,您还需要添加一个引用的部分(使用的关系身份证)到主文档的一部分。 这适用于图像,标题和页脚。 (注释,脚注和尾注有一点不同,那是你添加到主文档的一部分,是/脚注/尾注的个人意见,参考文献)。

的docx到(X)HTML的

docx4j 使用XSLT的docx转换为XHTML 1:

AbstractHtmlExporter exporter = new HtmlExporterNG2();

/ /注意:* 2 *有

/ /写入StreamResult(在这种情况下,输出流)

OutputStream os = new java.io.FileOutputStream(inputfilepath + ".html" );

javax.xml.transform.stream.StreamResult result
= new javax.xml.transform.stream.StreamResult(os);

exporter.html(wordMLPackage, result,

inputfilepath + "_files" );

你会发现生成的HTML是干净的。

docx4j 使用Java的XSLT扩展函数做繁重,所以对XSLT本身就是尽量简单。

的docx为PDF

docx4j 生产的XSL的,它可以反过来用于创建PDF。

目前,维克多被集成到Apache的 docx4j 用于创建PDF格式。 (不久,我们将改变这么多的事 docx4j 生成的,由您首选使用的渲染,不管是维克多,或如XEP商业工具)。

要创建一个PDF:

/ /字体身份映射微软Windows最佳

wordMLPackage.setFontMapper( new IdentityPlusMapper());

/ /设置转换器

org.docx4j.convert.out.pdf.PdfConversion c
= new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage);

/ /写入到输出流

OutputStream os = new java.io.FileOutputStream(inputfilepath + ".pdf" );

c.output(os);

图像处理

当您添加一个图像到Word 2007文档中,一般增加一条,作为一个新的部分(ie你会发现在产生的docx的一部分,包含base 64格式化图像)。

当您打开该文档中 docx4j, docx4j will create an image part representing it.

它也可以创建一个链接的图像。 在这种情况下,图像不是嵌入的docx包,而是正处于外部位置引用。

docx4j之 BinaryPartAbstractImage 类包含的方法,使您可以同时创建嵌入和链接的图像以及适当的关系()。

/ **

*创建一个字节数组从所提供的图像的一部分,其附加到

*主要文件的一部分,并返回它.* /

public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage,

byte [] bytes)

/ **

*创建一个字节数组从所提供的图像的一部分,其附加到源的一部分

*(如主文件的一部分,一个头的一部分等),并返回它.* /

public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage,

Part sourcePart, byte [] bytes)

/ **

*创建一个链接的图像的一部分,并附作为其指定的源部分制造业│

*(例如一个头的一部分) * /

public static BinaryPartAbstractImage createLinkedImagePart(
WordprocessingMLPackage wordMLPackage, Part sourcePart, String fileurl)

对于一个图像显示在文档中,我们还需要在适当的XML主文档的一部分。 这个XML可以采取2基本形式:

* 在Word 2007 瓦特:绘制 表格

<w:p>

<w:r>

<w:drawing>

<wp:inline distT ="0" distB ="0" distL ="0" distR ="0" >

<wp:extent cx ="3238500" cy ="2362200" / >

<wp:effectExtent l ="19050" t ="0" r ="0" b ="0" / >

:

<a:graphic >

<a:graphicData .. >

<pic:pic >

:

<pic:blipFill>

< a:blip r:embed ="rId5" / >

:

< / pic:blipFill>

:

< / pic:pic>

< / a:graphicData>

< / a:graphic>

< / wp:inline>

< / w:drawing>

< / w:r>

< / w:p>

* 在Word 2003的VML的 瓦特:的PICT 格式

<w:p>

<w:r>

<w:pict>

<v:shapetype id ="_x0000_t75" coordsize ="21600,21600" .. >

<v:stroke joinstyle ="miter" / >

<v:formulas>

:

< / v:formulas>

:

< / v:shapetype>

<v:shape .. style ="width:428.25pt;height:321pt" >

< v:imagedata r:id ="rId4" o:title ="" / >

< / v:shape>

< / w:pict>

< / w:r>

< / w:p>

docx4j 可以创建Word 2007 瓦特:绘图/可湿性粉剂:内嵌 您形式:

/ **

* Create a <wp:inline> element suitable for this image,

*可链接或嵌入在w:对/瓦特:读/写:绘图。

* If the image is wider than the page, it will be scaled

*自动。 查看Javadoc的其他签名。

* @帕拉姆库马拉 filenameHint,例如任何文字的原始文件名

* @帕拉姆库马拉 文本altText像HTML的ALT键

* @帕拉姆库马拉 分化抑制因子ID1一个独特的身份证明文件

* @帕拉姆库马拉 id2另一个独特的身份证明文件

* @帕拉姆库马拉 链接 ,如果这是真的要 联系不嵌入 * /

public Inline createImageInline(String filenameHint, String altText,

int id1, int id2, boolean link)

然后您可以添加到 瓦特:读/写:绘图。

最后, docx4j,你可以由Word格式转换(如PDF),不支持到PNG,这是一个支持格式的图片。 为此, docx4j 使用 ImageMagick的。 因此,如果您想使用此功能,您需要安装ImageMagick的。 docx4j 调用ImageMagick的使用:

Process p = Runtime.getRuntime().exec( "imconvert -density " + density + " -units PixelsPerInch - png:-" );

注意名称 imconvert ,这是用来让我们没有提供一个完整路径执行官。 您需要容纳的。

文本提取

一个快速的方法来提取文本从一个的docx,是使用 TextUtils

public static void extractText(Object o, Writer w)

其中元帅它是通过一个SAX ContentHandler的传递的对象,以输出到作家的文本。

文本替换

文本替换很容易,只要你是一个搜索字符串中是代表 org.docx4j.wml.Text 表格对象在您的期望。

不过,这并不一定是如此。 该字符串可以在运行文本打破出于以下几个原因:

* 字部分的格式不同(例如在大胆)

* 拼写/语法

* 编辑命令(rsid)

docx4j 最终将容纳这些案件,但不是现在。

除这一点,你可以在多种方式的文本替换,例如:

* 遍历主文档的一部分,看 org.docx4j.wml.Text 对象

* 元帅为一个字符串,搜索/替换,那么和解组再次

docx4j s XmlUtils还包括:

/ **

*给一个包含WML的字符串$(key1),)$(key2,返回一个合适的

*对象.* /

public static Object unmarshallFromTemplate(String wmlTemplateString,

的java.util.HashMap <String,字符串映射)

见UnmarshallFromTemplate的例子,在一个包含字符串操作:

<w:p>

<w:r>

<w:t> My favourite colour is ${colour} . < / w:t>

< / w:r>

< / w:p>

<w:p / >

<w:p>

<w:r>

<w:t> My favourite ice cream is ${icecream} . < / w:t>

< / w:r>

< / w:p>

提示和技巧

与平面的OPC XML格式

当你想看看里面一个docx文档,它是一个有点疼痛不得不把它解压到看一看有关的部分。

有2个解决此方法。

一个是 http://www.codeplex.com/PackageExplorer ,可以解压缩的docx,和漂亮的打印部分。

另一种方法是保存为Word XML文档(*. xml的docx)的。 这将产生一个XML文件,您可以打开一个XML编辑器,如XPontus。

docx4j 可以打开单位的OPC XML文件,并保存它们。

要打开一个平面的OPC XML文件:

WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new java.io.File(inputfilepath));

为了保存为扁平的OPC的XML:

wordMLPackage.save(new java.io.File(outputfilepath));

在这两种情况下,平OPC的代码将被用于当且仅当文件扩展名是。xml的。

记住UnmarshalFromString

当你操纵的docx文件,它是很有用的解组片段的XML(如字符串,表示一个段落要插入到文档)。

例如,给定:

< w:p xmlns:w ="http://schemas.openxmlformats.org/wordprocessingml/2006/main" >
< w:r >
< w:t > Hello world </ w:t >
</ w:r >
</ w:p >

您可以简单:

/ /假设字符串XML包含以上XML

org.docx4j.wml.P para = XmlUtils.unmarshalString(xml);

克隆

要克隆一个JAXB对象,在XmlUtils使用下列方法之一:

/ **克隆这个JAXB对象,使用默认JAXBContext。 * /

public static <T> T deepCopy(T value)

/ **克隆这个JAXB对象* /

public static <T> T deepCopy(T value, JAXBContext jc)

@XmlRootElement

最常用的对象有一个 @ XmlRootElement 注释,这样他们就可以被整理和unmarshalled。

在某些情况下,您可能会发现这个注释丢失。

如果您不能添加到JAXB注释的源代码,另一种是 马歇尔 它使用代码是明确的担忧由此产生的QName。 例如,XmlUtils包含:

/ **元帅到W3C的文件,供对象

*缺少@ XmlRootElement注解。 * /

public static org.w3c.dom.Document marshaltoW3CDomDocument(Object o, JAXBContext jc,
String uri, String local, Class declaredType)

你可以使用这像这样:

CTFootnotes footnotes =
wmlPackage.getMainDocumentPart().getFootnotesPart().getJaxbElement().getValue();

CTFtnEdn ftn = footnotes.getFootnote().get(1);

/ /没有对CTFtnEdn @ XmlRootElement,所以..

Document d = XmlUtils.marshaltoW3CDomDocument( ftn,

Context.jc, Namespaces.NS_WORD12, "footnote" , CTFtnEdn. class );

如果您需要解组,您可以使用:

public static Object unmarshalString(String str, JAXBContext jc, Class declaredType)

该 docx4j 论坛

自由的社会中提供的支持 docx4j 座谈会上,在 http://dev.plutext.org/forums/

这种讨论通常是在英国。 如果你能以温和的志愿者在您的语言论坛,请告诉我们。

其他支持选项

如果自由社会的支持,可用 docx4j 论坛不能满足您的需求,或者您只是想外包一些编码,欢迎您购买节目,咨询和优先支持 http://www.plutext.com/m/index.php/docx4j-support.html

通过购买Plutext服务,你支持持续发展 docx4j。

路线图

2010字的支持。 机制,支持新的XML元素/字模式推出了2010年,和兼容性。 这是3.0标签的主要理由为。

网页出口商: 摆脱旧的; NG2的规范。 这样做是为了消除任何'是我应该用'混乱,并集中精力/诀窍。

PDF格式出口商: viaXSLFO规范,并获得viaHTML摆脱viaIText和。 由于使用HTML,这个想法是消除任何'我应该用'混乱,并集中精力/诀窍。 docx4j 可以生产只,并在用户依靠维克多或有相当于实际生产PDF格式的XSL。 这将减少依赖性,使 docx4j 打火机。 这样做的目的是要消除的fop罐(280万),PDF格式渲染罐(160万),iText的罐(1.1米),且核心渲染器(100万)。

字体处理: 删除潘糖的东西,所以我们并不需要一个定制的维克多罐子。

布局模型/中间格式: docx4j 包含DocumentModel,可以进一步发展,以支持:

* 搜索/替换

* 估算网页内容

* 样式,关闭部分,列出了

插入OLE对象:这样的电子表格,PDF文件等可以嵌入。

版本说明

这个文件是写在Word 2007中,使用:

* 漂亮的打印使用的XML http://www.softlion.com/webTools/XmlPrettyPrint/default.aspx 或包资源管理器

* Java源代码格式化使用 http://www.java2html.de

PDF和HTML版本的使用产生 docx4j (通过的维克多的XSL和PDF格式)。

联系Plutext

除非你付出的支持,我怎么类型一般问题应直接向被张贴 docx4j forum 。 Plutext可以张贴到论坛的任何问题通过电子邮件应该已经向论坛接收。

Plutext可以在任何联系 jason@plutext.org 或 jharrop@plutext.com

1 http://forums.java.net/jive/thread.jspa?threadID=411

2 ,如果你得到错误'的访问限制:该类型 是不是rt.jar中获得所需的库因限制'(或许用一些与组合的Eclipse 3.4 /或JDK 6更新10?),你需要进入生成标签路径的项目,图书馆,选择JRE的系统库,并添加一个访问规则,“无障碍,**”。