700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java根据word模板生成文档(含文本替换和动态生成表格)

java根据word模板生成文档(含文本替换和动态生成表格)

时间:2024-07-20 21:55:22

相关推荐

java根据word模板生成文档(含文本替换和动态生成表格)

开发功能需求:给定word模板,word模板中存在"${XXX}"格式的需要变量替换的一些词,包括直接可以被替换的词,需要循环获取、替换、格式处理的词(例如根据数据库存储内容循环生成表格),模板中还可能会有需要自动增行的表格。

1.用到的依赖

<!--word验证报告相关--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.4.3</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.1</version></dependency>

2.段落操作

XWPFParagraph->XWPFRun.setText(""),设置文本内容XWPFParagraph->XWPFRun.setBold(true),设置文本是否加粗XWPFParagraph->XWPFRun.setFontSize(14),设置文本字体大小XWPFParagraph->XWPFRun.setFontFamily("Times New Roman", XWPFRun.FontCharRange.ascii)以及XWPFRun.setFontFamily("宋体", XWPFRun.FontCharRange.eastAsia),设置中英文字体XWPFParagraph->XWPFRun.setBold(true),设置文本是否加粗XWPFParagraph.setFontAlignment(HorizontalAlignment.CENTER),设置文本对齐方式XmlCursor xmlCursor = document.getParagraphArray(posOfFirstParagraph + 1).getCTP().newCursor(),获取游标位置XWPFParagraph paragraph =XWPFDocument.insertNewParagraph(xmlCursor),在游标位置新增段落XWPFTable table = XWPFDocument.insertNewTbl(xmlCursor),在游标位置新增表格

3.表格操作

table->row->cell.setText(""),设置单元格内的文本table->row->cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER),设置表格垂直居中table->row->cell->CTTc->CTP->CTPPr->CTJc.setVal(STJc.CENTER),设置表格水平居中table->row->cell->CTTc->CTP->CTPPr->CTInd.setFirstLineChars(BigInteger.valueOf(0))以及CTInd.setFirstLine(BigInteger.valueOf(0)),设置首行缩进table->row->cell->CTTc->CTP->CTR->CTRPr->CTHpsMeasure.setVal(BigInteger.valueOf(24)),设置字体大小table->row->cell->CTTc->CTTcPr->CTTcBorders->CTBorder.setVal(STBorder.SINGLE)以及CTBorder.setSz(new BigInteger("12")),设置某个单元格某个边框格式以及粗细table->CTTbl->CTTblPr->CTTblBorders->CTBorder.setSz(new BigInteger("12")),设置表格某个边框格式以及粗细table->row->cell->CTTc->CTTcPrsetVMerge(CTVMerge.setVal(STMerge.RESTART)以及CTVMerge.setVal(STMerge.CONTINUE)),对上下内容相同的行进行合并单元格table->row->cell->seColor("D9D9D9"),设置单元格的颜色table->row->cell->CTTc->CTP->CTR->CTRPr->CTFonts.setEastAsia("黑体")以及CTFonts.setAscii("Times New Roman"),设置中英文字体

4.段落文本替换

获取全文的段落,若段落中存在"$",说明存在需要替换的文本,获取段落的所有runs,依次判断每个run中是否存在"$",若存在,则将该"${XXX}"替换成集合中它对应的值;若有特殊内容需要替换,例如需要根据数据库内容循环生成新的内容,则需要获取要插入表格的游标,在游标位置创建新的段落,创建新的run,设置run的文本/表标题等内容、字体、字号等,或者在游标位置创建新的表格,按照table->row->cell,依次给每一个cell赋值,最终完成表格内容的填充;填充完毕,按照文本和表格的操作修改文本和表格。

5.表格文本替换

获取全文的表格,若表格中存在"$",说明存在需要替换的文本,获取表格的所有rows下的cells,依次判断每个cell中是否存在"$",若存在,则获取该cell的段落下的run,将该"${XXX}"替换成集合中它对应的值。

6.表格自动增行

获取要在表格中展示的全部数据,以及需要处理的表格位置;根据要展示的数据的行数和列数,新增一个指定行数和列数的空白表格;在空白表格中插入要展示的数据;优化表格的格式,包括合并上下相同内容的单元格,水平居中、垂直居中、首行不缩进、设置字体和大小、表格部分边框加粗等。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。