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
|
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
|
建筑
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
* 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