3、docx4j一个包含多种样式的段落实现

docx4j
placeholder image
admin 发布于:2018-10-13 22:49:58
阅读:loading

基本描述

如题,本文使用编程式的方式去实现一个段落文本的各种样式cao作,跟前篇文章中是同样的道理,我们一样先采用草稿的方式去观察这种多样式段落的xml结构,再将这种xml结构转换为使用Java对象的方式去处理,关于本段落的文本所有涉及到的样式有:字体、大小、颜色、居中、粗体、斜体、删除线(中线)、下划线(波浪线),最终实现效果图参考如下:

image.png

参考代码

参考代码实现如下:

    package cn.chendd.docx4j;

     

    import java.io.File;

    import java.math.BigInteger;

     

    import org.docx4j.jaxb.Context;

    import org.docx4j.openpackaging.packages.WordprocessingMLPackage;

    import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;

    import org.docx4j.wml.BooleanDefaultTrue;

    import org.docx4j.wml.Color;

    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.R;

    import org.docx4j.wml.RFonts;

    import org.docx4j.wml.RPr;

    import org.docx4j.wml.Text;

    import org.docx4j.wml.U;

    import org.docx4j.wml.UnderlineEnumeration;

     

    public class TitleTest {

     

       ObjectFactory factory = Context.getWmlObjectFactory();

      

       public static void main(String[] argsthrows Exception {

          new TitleTest();

       }

      

       public TitleTest() throws Exception{

          String outPath = System.getProperty("user.dir") + "/template/out/多样式段落.docx";

          WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();

          MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart();

          mainDocumentPart.addObject(createTitle());

          wordPackage.save(new File(outPath));

       }

      

       public P createTitle(){

          RPr rpr = factory.createRPr();

          RFonts font = new RFonts();

          //设置字体

          font.setAscii("宋体");

          font.setEastAsia("宋体");//经测试发现这个设置生效

          rpr.setRFonts(font);

          //设置颜色

          Color color = new Color();

          color.setVal("ABCDEF");

          rpr.setColor(color);

          //设置字体大小

          HpsMeasure fontSize = new HpsMeasure();

          fontSize.setVal(new BigInteger("48"));

          rpr.setSzCs(fontSize);

          rpr.setSz(fontSize);

          //设置粗体

          BooleanDefaultTrue bold = factory.createBooleanDefaultTrue();

          bold.setVal(Boolean.TRUE);

          rpr.setB(bold);

          //设置斜体

          BooleanDefaultTrue ltalic = new BooleanDefaultTrue();

          rpr.setI(ltalic);

          //设置删除线

          BooleanDefaultTrue deleteLine = new BooleanDefaultTrue();

          deleteLine.setVal(Boolean.TRUE);

          rpr.setStrike(deleteLine);

          //设置下划线

          U u = factory.createU();

          u.setVal(UnderlineEnumeration.SINGLE);

          u.setVal(UnderlineEnumeration.DOUBLE);//双下划线

          u.setVal(UnderlineEnumeration.DASH);//虚线

          u.setVal(UnderlineEnumeration.WAVE);//波浪线

          rpr.setU(u);

         

          //设置显示文本

          Text text = factory.createText();

          text.setValue("雪地里走");

          R r = factory.createR();

          r.getContent().add(text);

          r.setRPr(rpr);

         

          P p = factory.createP();

          //设置段落居中

          PPr ppr = new PPr();

          Jc jc = new Jc();

          jc.setVal(JcEnumeration.LEFT);

          jc.setVal(JcEnumeration.RIGHT);

          jc.setVal(JcEnumeration.CENTER);

          ppr.setJc(jc);

          p.setPPr(ppr);

         

          p.getContent().add(r);

         

          return p;

       }

    }

 

同时多说一下,在document对象下还提供有一些便捷创建段落文本的实现,如addStyledParagraphOfText方法中就可以根据样式id去快捷创建样式文本,样式id可参考如下:“Title”、“Subtitle”、“Header”,,Header1。。。等,在源码org.docx4j.model.PropertyResolver中可以查看到。

相关下载

附上代码中的生成文件下载:

多样式段落.docx


上述许多内容已经过时和过期了,留存本篇文章仅为方便个人查看,原始文章的信息参考:

原始链接:https://www.chendd.cn/information/viewInformation/other/252.a

最后更新:2018-10-13 22:49:58

访问次数:1525

评论次数:1+

点赞个数:7,[相当给力:6,精品文章:1]

 点赞


 发表评论

当前回复:作者

 评论列表


留言区