http://www.chendd.cn/information/viewInformation/other/251.a
关于这个 hello world 的示例本来准备放在第一篇文章中的,但是后来觉得一个能够轻松入门的程序也尤为重要,毕竟由于docx4j很强大,对于入门并且能够深入的来说才是最主要的,本篇文章主要是编程式的代码实现一个单文本的代码实现。
首先,我们先新建一个docx文档,并且写入文本“hello,陈dd”,然后使用解压缩软件打开这个docx文档,找到document.xml,打开后发现它是有这么一堆的xml标签构成的,p作为一个段落标记,r为一小块,rpr为相应快的样式属性集,t对应的为文本标签,参考如下图所示:
其实这个图并不太友好,之前在Word2007下创建的一个段落文本为<w:p><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t>hello,陈dd</w:t></w:r></w:p>,所有的文本内容均在一个t标签内,此时我们需要关注一下开发包中的《Docx4j_GettingStarted.pdf》快速入门文档,它里面有介绍到这些标签类,当然也有包含一个hello world的xml文档结构,也就是这些标签对应的Java对应类,参考如下图所示:
所以加上一个文档的生成和保存代码外,它们的代码可参考如下:
package cn.chendd.docx4j.examples;
import java.io.File;
import java.util.List;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.R;
import org.docx4j.wml.RFonts;
import org.docx4j.wml.RPr;
import org.docx4j.wml.STHint;
import org.docx4j.wml.Text;
public class HelloWorldTest {
public static void main(String[] args) throws Exception {
//创建一个文档
WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
//获得这个文档的document跟标签对象
MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart();
//获取到body标签,并向body中添加子级元素
List<Object> body = mainDocumentPart.getContent();
//工厂类,可创建各种标签对象
ObjectFactory factory = Context.getWmlObjectFactory();
R r = factory.createR();
RPr rpr = factory.createRPr();
RFonts rFont = factory.createRFonts();
STHint sthInt = STHint.EAST_ASIA;
rFont.setHint(sthInt);
rpr.setRFonts(rFont);
r.setRPr(rpr);
Text text = factory.createText();
text.setValue("hello,陈dd");
r.getContent().add(text);
P p = factory.createP();
p.getContent().add(r);
body.add(p);
String outPath = System.getProperty("user.dir") + "/template/out/helloworld.docx";
wordPackage.save(new File(outPath));
}
}
代码运行结果参考为:
另外,在docx4j的所有示例中,当然也不会少于helloworld的示例,见NewDocxHelloWorld.java文件,代码1行,大家可以运行它的示例代码,将代码生成出来的docx文档使用压缩工具打开看看其中的文档结构,事实上,上述使用的方式在实际工作中比较实用,因为更多的功能实现是我们并不知道代码应该怎么写,但是我们可以通过通过以压缩包的方式打开这个文档,观察其中的xml结构来进行代码上的实现。
附上上述代码生成的文件: