第二个程序,首先向文件中写入点什么内容。写一个Hello World先。
package me.test.docx4j;
import java.io.File;
import javax.xml.bind.JAXBException;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;
import org.docx4j.wml.Document;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.R;
import org.docx4j.wml.Text;
import org.junit.Test;
public class HelloWorld {
@Test
public void doTest() throws Docx4JException, JAXBException {
WordprocessingMLPackage pkg = WordprocessingMLPackage.createPackage();
//docx文件中的文档部分MainDocumentPart。
MainDocumentPart main = pkg.getMainDocumentPart();
//Document对象表示文档本身。
Document doc = main.getContents();
//Document中的Body对象表示前景内容,还有Background对象表示背景内容。
Body body = doc.getBody();
//各种元素的工厂对象
ObjectFactory factory = Context.getWmlObjectFactory();
//创建一个段落(Paragraph,P)
P para = factory.createP();
//为段落创建一个文本块(Run,R)
R run = factory.createR();
//为文本块创建一个文本(Text)
Text text = factory.createText();
text.setValue("Hello World");
//文本加入文本块
run.getContent().add(text);
//文本块加入段落
para.getContent().add(run);
//段落加入文档
body.getContent().add(para);
//重复一遍
body.getContent().add(para);
pkg.save(new File(System.getProperty("user.dir"), "Simple Hello World.docx"));
}
}
只有一个Hello World难免太单调了,加上中文设置个格式。内容顿时就丰富了起来。
其中最烦人的是长度单位五花八门,详细的解读请见http://startbigthinksmall.wordpress.com/2010/01/04/points-inches-and-emus-measuring-units-in-office-open-xml/
package me.test.docx4j;
import java.io.File;
import java.math.BigInteger;
import javax.xml.bind.JAXBException;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;
import org.docx4j.wml.Color;
import org.docx4j.wml.Document;
import org.docx4j.wml.HpsMeasure;
import org.docx4j.wml.Jc;
import org.docx4j.wml.JcEnumeration;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.PPr;
import org.docx4j.wml.PPrBase;
import org.docx4j.wml.PPrBase.Ind;
import org.docx4j.wml.R;
import org.docx4j.wml.RFonts;
import org.docx4j.wml.RPr;
import org.docx4j.wml.Text;
import org.junit.Test;
public class HelloWorldWithFormats {
@Test
public void doTest() throws Docx4JException, JAXBException {
WordprocessingMLPackage pkg = WordprocessingMLPackage.createPackage();
//docx文件中的文档部分MainDocumentPart。
MainDocumentPart main = pkg.getMainDocumentPart();
//Document对象表示文档本身。
Document doc = main.getContents();
//Document中的Body对象表示前景内容,还有Background对象表示背景内容。
Body body = doc.getBody();
//各种元素的工厂对象
ObjectFactory factory = Context.getWmlObjectFactory();
//创建一个段落(Paragraph,P)
P para = factory.createP();
//为段落创建一个文本块(Run,R)
R run = factory.createR();
//为文本块创建一个文本(Text)
Text text = factory.createText();
text.setValue("Hello World! 你好,世界!");
//创建段落格式
PPr ppr = factory.createPPr();
//设置居中对齐
Jc jc = factory.createJc();
jc.setVal(JcEnumeration.CENTER);
ppr.setJc(jc);
//设置缩进和间距
//这里用的单位是Twentieths of a point (dxa),1/20点
Ind ind = new Ind();
ind.setFirstLine(BigInteger.valueOf(22 * 20));
ppr.setInd(ind);
PPrBase.Spacing spacing = new PPrBase.Spacing();
spacing.setBefore(BigInteger.valueOf(0));
spacing.setAfter(BigInteger.valueOf(0));
spacing.setLine(BigInteger.valueOf(24 * 10));
ppr.setSpacing(spacing);
//设置段落格式
para.setPPr(ppr);
//创建文本格式
RPr rpr = factory.createRPr();
//设置文本颜色
Color color = new Color();
//红色
//color.setVal("red")同样有效
color.setVal("FF0000");
rpr.setColor(color);
//设置字体类型
RFonts rf = factory.createRFonts();
rf.setAscii("Times New Roman");
rf.setHAnsi("Times New Roman");
rf.setEastAsia("微软雅黑");
rpr.setRFonts(rf);
//设置字体大小
//字体大小单位是HpsMeasure,即Half-points,半个点
HpsMeasure size = new HpsMeasure();
size.setVal(BigInteger.valueOf(24));
rpr.setSz(size);
rpr.setSzCs(size);
//设置文本格式
run.setRPr(rpr);
//文本加入文本块
run.getContent().add(text);
//文本块加入段落
para.getContent().add(run);
//段落加入文档
body.getContent().add(para);
//重复一遍
body.getContent().add(para);
pkg.save(new File(System.getProperty("user.dir"), "Hello World with Formats.docx"));
}
}
本文介绍如何使用Java库Docx4j创建带有格式的Word文档,包括设置中文内容、字体、颜色、对齐方式及段落间距等。
290

被折叠的 条评论
为什么被折叠?



