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

http://www.chendd.cn/information/viewInformation/other/252.a

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

1539495861038072193.png.image

参考代码实现如下:    

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[] args) throws 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中可以查看到。

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

icon_txt.gif多样式段落.docx

转载于:https://my.oschina.net/haiyangyiba/blog/2246100

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值