文章目录
- 一、使用模板文件生成标题
- 1、创建模板文件
- 2、获得模板文档的整体样式
- 3、使用标题样式
- 4、结果展示
- 二、自定义标题
- 1、生成标题方法
- 2、调用生成标题方法
- 3、结果展示
一、使用模板文件生成标题
1、创建模板文件
新建一个doc文件,如format.doc,创建标题,如标题1、标题2……
2、获得模板文档的整体样式
// 新建的word文档对象
XWPFDocument doc = new XWPFDocument();
// word整体样式
// 读取模板文档
XWPFDocument template = new XWPFDocument(new FileInputStream("D:\\test\\poi\\word\\format.docx"));
// 获得模板文档的整体样式
CTStyles wordStyles = template.getStyle();
// 获取新建文档对象的样式
XWPFStyles newStyles = doc.createStyles();
// 关键行// 修改设置文档样式为静态块中读取到的样式
newStyles.setStyles(wordStyles);
3、使用标题样式
// 标题1,1级大纲
XWPFParagraph para1 = doc.createParagraph();
// 关键行// 1级大纲
para1.setStyle("1");
XWPFRun run1 = para1.createRun();
// 标题内容
run1.setText("标题1");// 标题2,2级大纲
XWPFParagraph para2 = doc.createParagraph();
// 关键行// 2级大纲
para2.setStyle("2");
XWPFRun run2 = para2.createRun();
// 标题内容
run2.setText("标题2");// 正文
XWPFParagraph paraX = doc.createParagraph();
XWPFRun runX = paraX.createRun();
for(int i=0;i<100;i++) {// 正文内容runX.setText("正文\r\n");
}// word写入到文件
FileOutputStream fos;
try {fos = new FileOutputStream("D:\\test\\poi\\word\\test.docx");doc.write(fos);fos.close();
} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();
}
4、结果展示
二、自定义标题
1、生成标题方法
/*** * @param doc* @param styles* @param strStyleId 标题id* @param headingLevel 标题级别* @param pointSize 字体大小(/2)* @param hexColor 字体颜色* @param typefaceName 字体名称(默认宋体)*/public void createHeadingStyle(XWPFDocument doc, XWPFStyles styles, String strStyleId, int headingLevel, int pointSize, String hexColor, String typefaceName) {//创建样式CTStyle ctStyle = CTStyle.Factory.newInstance();//设置idctStyle.setStyleId(strStyleId);CTString styleName = CTString.Factory.newInstance();styleName.setVal(strStyleId);ctStyle.setName(styleName);CTDecimalNumber indentNumber = CTDecimalNumber.Factory.newInstance();indentNumber.setVal(BigInteger.valueOf(headingLevel));// 数字越低在格式栏中越突出ctStyle.setUiPriority(indentNumber);CTOnOff onoffnull = CTOnOff.Factory.newInstance();ctStyle.setUnhideWhenUsed(onoffnull);// 样式将显示在“格式”栏中ctStyle.setQFormat(onoffnull);// 样式定义给定级别的标题CTPPr ppr = CTPPr.Factory.newInstance();ppr.setOutlineLvl(indentNumber);ctStyle.setPPr(ppr);XWPFStyle style = new XWPFStyle(ctStyle);CTHpsMeasure size = CTHpsMeasure.Factory.newInstance();size.setVal(new BigInteger(String.valueOf(pointSize)));CTHpsMeasure size2 = CTHpsMeasure.Factory.newInstance();size2.setVal(new BigInteger(String.valueOf(pointSize)));CTFonts fonts = CTFonts.Factory.newInstance();if(typefaceName == null || typefaceName.equals("")) typefaceName = "宋体";fonts.setAscii(typefaceName); //字体CTRPr rpr = CTRPr.Factory.newInstance();rpr.setRFonts(fonts);rpr.setSz(size);rpr.setSzCs(size2); //字体大小CTColor color=CTColor.Factory.newInstance();color.setVal(hexToBytes(hexColor));rpr.setColor(color); //字体颜色style.getCTStyle().setRPr(rpr);// is a null op if already definedstyle.setType(STStyleType.PARAGRAPH);styles.addStyle(style);}public static byte[] hexToBytes(String hexString) {HexBinaryAdapter adapter = new HexBinaryAdapter();byte[] bytes = adapter.unmarshal(hexString);return bytes;}
2、调用生成标题方法
// 新建的word文档对象
XWPFDocument doc = new XWPFDocument();
// 获取新建文档对象的样式
XWPFStyles newStyles = doc.createStyles();
String heading1 = "My Heading 1";
docUtils.createHeadingStyle(doc, newStyles, heading1, 1, 45, "000000", "宋体");
XWPFParagraph para1 = doc.createParagraph();
para1.setStyle("My Heading 1");
XWPFRun run1 = para1.createRun();
run1.setText("My Heading 1");
// word写入到文件
FileOutputStream fos;
try {fos = new FileOutputStream("D:\\test\\poi\\word\\test.docx");doc.write(fos);fos.close();
} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();
}
3、结果展示
参考文章:
- 如何使用Apache POI为docx文件中的段落设置标题样式?
- Apache POI自动生成Word文档