标签:rate together tor 自己 new merge 一个 private 它的
原文标题:Adding layout to your Docx4j-generated word documents, part 2
原文链接:http://blog.iprofs.nl/2012/11/19/adding-layout-to-your-docx4j-generated-word-documents-part-2/
原文作者:lvdpal
发表日期:2012年11月19日
注:我没有再试着翻译代码中的注释,因为我觉得我水平实在有限,翻译过来的注释还不如看英文来地明白...
在前面发表的两篇博客中,我写了一些关于在docx文档中创建表格和添加图像和布局的内容。本篇博客中我将继续介绍一些文档布局相关的示例:
更改默认样式
几乎所有的客户都想要他们自己的风格。Word提供了一些默认的样式但它们不够好(注意一下我没有更改两个图像之间的文本,因此图像中的文本并不反映实际的风格):
大多数客户会想改变这些风格,在应用了我们在本例中创建的风格之后,上面的word文档看起来会像这样:
- public class ChangingTheStyleSheet {
- private static WordprocessingMLPackage wordMLPackage;
-
-
- public static void main (String[] args) throws Docx4JException {
- wordMLPackage = WordprocessingMLPackage.createPackage();
- alterStyleSheet();
-
- wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Title",
- "Hello World! This title is now in Arial.");
- wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Subtitle",
- "Subtitle, this subtitle is now Arial too");
- wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Heading1",
- "As is Heading1");
- wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Heading2",
- "Heading2 is now Arial, no longer bold and has an underline " +
- "and fontsize 12");
- wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Heading3",
- "Heading3 is now Arial");
- wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Normal",
- "And normal text has changed to Arial and fontsize 10");
-
- wordMLPackage.save(new java.io.File("src/main/files/HelloWord12.docx") );
- }
-
-
- public static void alterStyleSheet() {
- StyleDefinitionsPart styleDefinitionsPart =
- wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart();
- Styles styles = styleDefinitionsPart.getJaxbElement();
-
- List<Style> stylesList = styles.getStyle();
- for (Style style : stylesList) {
- if (style.getStyleId().equals("Normal")) {
- alterNormalStyle(style);
- } else if (style.getStyleId().equals("Heading2")) {
- alterHeading2Style(style);
- } else if (style.getStyleId().equals("Heading1") ||
- style.getStyleId().equals("Heading3") ||
- style.getStyleId().equals("Title") ||
- style.getStyleId().equals("Subtitle")) {
- getRunPropertiesAndRemoveThemeInfo(style);
- }
- }
- }
-
-
- private static void alterNormalStyle(Style style) {
-
-
- RPr rpr = new RPr();
- changeFontToArial(rpr);
- changeFontSize(rpr, 20);
- style.setRPr(rpr);
- }
-
-
- private static void alterHeading2Style(Style style) {
- RPr rpr = getRunPropertiesAndRemoveThemeInfo(style);
- removeBoldStyle(rpr);
- changeFontSize(rpr, 24);
- addUnderline(rpr);
- }
-
- private static RPr getRunPropertiesAndRemoveThemeInfo(Style style) {
-
-
- RPr rpr = style.getRPr();
- removeThemeFontInformation(rpr);
- return rpr;
- }
-
-
- private static void changeFontToArial(RPr runProperties) {
- RFonts runFont = new RFonts();
- runFont.setAscii("Arial");
- runFont.setHAnsi("Arial");
- runProperties.setRFonts(runFont);
- }
-
-
- private static void changeFontSize(RPr runProperties, int fontSize) {
- HpsMeasure size = new HpsMeasure();
- size.setVal(BigInteger.valueOf(fontSize));
- runProperties.setSz(size);
- }
-
-
- private static void removeThemeFontInformation(RPr runProperties) {
- runProperties.getRFonts().setAsciiTheme(null);
- runProperties.getRFonts().setHAnsiTheme(null);
- }
-
-
- private static void removeBoldStyle(RPr runProperties) {
- runProperties.getB().setVal(false);
- }
-
-
- private static void addUnderline(RPr runProperties) {
- U underline = new U();
- underline.setVal(UnderlineEnumeration.SINGLE);
- runProperties.setU(underline );
- }
- }
添加页脚或页眉
添加页脚或页眉(或二者兼具)是一个很多客户都想要的特性。幸运的是,做这个并不是很难。这个例子是docx4j示例的一部分,但是我删掉了添加图像的部分只展示最基本的添加页脚部分。添加页眉,你需要做的仅仅是用header来替换footer(或者hdr替换ftr)。
- public class AddingAFooter {
- private static WordprocessingMLPackage wordMLPackage;
- private static ObjectFactory factory;
-
-
- public static void main (String[] args) throws Docx4JException {
- wordMLPackage = WordprocessingMLPackage.createPackage();
- factory = Context.getWmlObjectFactory();
-
- Relationship relationship = createFooterPart();
- createFooterReference(relationship);
-
- wordMLPackage.getMainDocumentPart().addParagraphOfText("Hello Word!");
-
- wordMLPackage.save(new File("src/main/files/HelloWord14.docx") );
- }
-
-
- private static Relationship createFooterPart() throws InvalidFormatException {
- FooterPart footerPart = new FooterPart();
- footerPart.setPackage(wordMLPackage);
-
- footerPart.setJaxbElement(createFooter("Text"));
-
- return wordMLPackage.getMainDocumentPart().addTargetPart(footerPart);
- }
-
-
- private static Ftr createFooter(String content) {
- Ftr footer = factory.createFtr();
- P paragraph = factory.createP();
- R run = factory.createR();
- Text text = new Text();
- text.setValue(content);
- run.getContent().add(text);
- paragraph.getContent().add(run);
- footer.getContent().add(paragraph);
- return footer;
- }
-
-
- private static void createFooterReference(Relationship relationship) {
- List<SectionWrapper> sections =
- wordMLPackage.getDocumentModel().getSections();
-
- SectPr sectionProperties = sections.get(sections.size() - 1).getSectPr();
-
- if (sectionProperties==null ) {
- sectionProperties = factory.createSectPr();
- wordMLPackage.getMainDocumentPart().addObject(sectionProperties);
- sections.get(sections.size() - 1).setSectPr(sectionProperties);
- }
-
- FooterReference footerReference = factory.createFooterReference();
- footerReference.setId(relationship.getId());
- footerReference.setType(HdrFtrRef.DEFAULT);
- sectionProperties.getEGHdrFtrReferences().add(footerReference);
- }
- }
在页脚添加页码
我在本博客要讨论的最后一个特性是怎样在我们刚创建的页脚处添加页码。你可能已经知道,在Word中页码是一个域,因此本例或多或少是前面的两个例子的结合:目录表和页脚。
总结
在三篇博客中,我展示了怎样创建一个word文档以及一些很常用的特性。这些示例全都是我的客户要求我需要创建的word文档。而且我觉得它们足以让你知道如何去做更多其它的事情,如果不是,用你所需要的特性创建一个文档并去查看内部的XML,如果一切仍然不能奏效,你可以到Docx4j论坛进行提问,docx4j的作者会定期尝试回答所有的问题。
在以后的博客中我会展示一些关于xlsx文档的示例。
向Docx4j生成的word文档中添加布局--第二部分
标签:rate together tor 自己 new merge 一个 private 它的
原文地址:http://www.cnblogs.com/cxxjohnson/p/7899262.html