使用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
该链接为支持颜色的枚举类