使用dock4j创建work文档并且设置字体背景颜色

这篇博客介绍了如何使用docx4j库在Java中创建word文档,并详细展示了如何设置字体、颜色、对齐方式以及背景色。通过示例代码,作者演示了创建段落、设置居中、创建文本以及调整字体样式和颜色的方法,对于需要进行docx文件操作的开发者具有参考价值。
摘要由CSDN通过智能技术生成

使用dock4j创建work文档并且设置字体背景颜色

前言
最近因为工作需求需要写一个文件格式转换的服务,过程中因为docx4j的国内文档与类似博客太少导致写的时候有点那啥,所以打算把这次写的一些东西发出来,如果能给别人带来一些帮助那就再好不过了

创建一个word文档

 public void  convertCaseToWord(CaseConvertReq caseConvertReq, List<String> fieldList,String fileDircotry,String fileName) throws Docx4JException, JAXBException {
        WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
        MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart();
        mainDocumentPart.addObject(createParagraph(field,content));
        wordPackage.save(new File(fileDircotry+"/"+fileName));
}

创建一个段落并设置居中

ObjectFactory factory = Context.getWmlObjectFactory();
public P createParagraph(String fieldName,Object content){
        P p = factory.createP();
        PPr ppr = new PPr();
        ppr.setJc(createJc(fieldStyleEnum.getIsPpr()));
        p.setPPr(ppr);
        p.getContent().add(createR(fieldStyleEnum,content));
        return p;
    }
 public Jc createJc(Integer pprType){
        Jc jc = new Jc();
        if (pprType ==1){
            jc.setVal(JcEnumeration.CENTER);
        }else if (pprType== 2){
            jc.setVal(JcEnumeration.RIGHT);
        }else {
            jc.setVal(JcEnumeration.LEFT);
        }
        return jc;
    }

创建文本并设置字体与颜色等

public RFonts createRFonts(String fontType){
        RFonts font = new RFonts();

//            font.setAscii("宋体");

        font.setEastAsia(fontType);//经测试发现这个设置生效
        return font;

    }

    public Color createFontColor(String fontColor){
        Color color = new Color();

        color.setVal(fontColor);
        return color;
    }
	//设字体背景颜色
    public Highlight createHighLight(String backGroundColor){
        Highlight highlight = new Highlight();
        highlight.setVal(backGroundColor);
        return highlight;
    }

    public BooleanDefaultTrue createBold(){
        BooleanDefaultTrue bold = factory.createBooleanDefaultTrue();
        bold.setVal(Boolean.TRUE);
        return bold;
    }

    public R createR(FieldStyleEnum fieldStyleEnum,Object content){
        RPr rpr = factory.createRPr();
        if (fieldStyleEnum.getFontType()!=null){
            rpr.setRFonts(createRFonts(fieldStyleEnum.getFontType()));
        }

        //设置颜色
        if (fieldStyleEnum.getFontColor()!=null){
            rpr.setColor(createFontColor(fieldStyleEnum.getFontColor()));
        }

        if (fieldStyleEnum.getBackground()!=null){
            rpr.setHighlight(createHighLight(fieldStyleEnum.getBackground()));
        }

        //设置字体大小

        HpsMeasure fontSize = new HpsMeasure();

        fontSize.setVal(new BigInteger(fieldStyleEnum.getFontSize().toString()));

        rpr.setSzCs(fontSize);

        rpr.setSz(fontSize);

        //设置粗体


        if (fieldStyleEnum.getIsBold()==1){
            rpr.setB(createBold());
        }

        //设置斜体
//
//        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);

        //设置显示文本
        R r = factory.createR();
      	Text text = factory.createText();
      	//设置保留空格
        text.setSpace("preserve");
        r.setRPr(rpr);
        return r;
    }

字体背景颜色不支持色号
http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/highlight.html?_ga=2.233555486.1465642839.1636338627-13109744.1636094690
该链接为支持颜色的枚举类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值