Appearance
Office操作工具类
一、Word 操作工具类
说明(包路径:com.kg.component.office)
- 写入文本-工具类: WordWriteStringUtils.java
- 写入表格-工具类: WordWriteTableUtils.java
- 写入图片-工具类: WordWriteImageUtils.java
- 写入HTML-工具类: WordWriteHtmlUtils.java
- 文本常见格式(字号、字体等)-实体类: dto.WordStrFormatDTO.java
- 表格常见格式(宽高、边框等)-实体类: dto.WordTableFormatDTO.java
2.1 导出原理
导出 word 原理:
- 先读取word模板
- 根据 ${tag} 标签替换为数据(HTML、文本字符串、表格、图片)
- 再写入新的word文件
- 模板文件格式如下图:
示例代码:
java
public static void main(String[] args) {
String templatePath = ResourcePathUtils.path("templates/hello.docx");
String outPath = FilePathConfig.SAVE_PATH + "/saveFolder/"+ TimeUtils.now().toFormat("yyyyMMdd") +".docx";
// 1 读取模板文件内容
XWPFDocument doc = new XWPFDocument(new FileInputStream(templatePath));
// 2 写入内容,参数(文档, tag标签, 待写入数据, 是否追加)
WordWriteStringUtils.writeStrByKey(doc, "data1", "标题1", false);
// 3 生成新的word文件
doc.write(new FileOutputStream(outPath));
doc.close();
}
2.2 写文本
- 2.2.1 在指定位置写入文本
说明
- 方法1:无格式写入,直接写入到指定位置,一般在模板中什么格式写入就是什么格式
- 方法2:有格式写入,写入到指定位置,并设置格式
参数说明
- doc: 要操作的文档
- key: 写入位置标签(例如:word模板中${data1},则传入"data1")
- content: 待写入内容
- format: 文本常用格式设置(见:WordStrFormatDTO.java)
- isAppend: 写入后是否保留原标签,用于再次写入(true保留,false不保留)
- 格式使用WordStrFormatDTO传入,该类定义了常用的格式
java
/** Word 文本、段落 - 常用属性 */
@Getter
@Setter
public class WordStrFormatDTO {
private Boolean bold;// 是否加粗
private Boolean italic;// 是否斜体
private Boolean underline;// 是否下划线
private String fontFamily;// 字体(例如:仿宋 宋体 楷体 Microsoft YaHei)
private Integer fontSize;// 字号,例如:10pt-五号 12pt-小四 14pt-四号 16pt-小三 18pt-三号 22pt-小二 24pt-二号 26pt-小一 36pt-一号
private String color;// 颜色(RRGGBB,如:FF0000表示红色)
}
- 2.2.2 在新一行写入文本(先换行再写入)
说明
- 方法1:无格式写入,写入到新行,一般在模板中什么格式写入就是什么格式
- 方法2:有格式写入,写入到新行,并设置格式
- 参数说明和文本常见格式,同上:2.2.1
2.3 写表格
- 2.3.1 写入一个新表格(空表)
说明
- 设置行数和列数,然后生成一个空表格,写入到文档
- 后面的操作步骤,在该表格内写入
- 2.3.2 写入单行(例如:标题行)数据
说明
- 方法1:无格式,写入标题行
- 方法2:自定义格式,写入标题行
参数说明
- table: 要操作的表格
- startRow: 写入数据的起始行
- rowData: 待写入数据(例如:标题列表)
- cover: 是否覆盖原内容(不覆盖,则在原内容后面追加)
- format: 单元格内部文字格式,WordStrFormatDTO,见:2.2.1
- 2.3.3 写入多行(List<List<String>>)数据
说明
- 方法1:无格式,写入数据行
- 方法2:自定义格式,写入数据行
参数说明
- table: 要操作的表格
- startRow: 写入数据的起始行
- rowList: 待写入数据列表(格式:List<List<String>>)
- cover: 是否覆盖原内容(不覆盖,则在原内容后面追加)
- format: 单元格内部文字格式,WordStrFormatDTO,见:2.2.1
- 2.3.4 合并单元格
java
{
// 合并单元格(参数:待操作的表格、起始行、结束行、起始列、结束列)
WordWriteTableUtils.tableMerge(table, 0, 1, 0, 0);// 合并第1列,1-2行
WordWriteTableUtils.tableMerge(table, 2, 2, 0, 5);// 合并第3行,第1-6列
}
- 2.3.5 设置 表格/单元格 格式
说明
- 设置表格格式:设置表格的宽度、高度、边框、背景色等
- 设置单元格格式:设置单元格的宽度、高度、边框、背景色等
参数说明
- table: 要操作的表格
- startRow: 起始行(设置单元格格式)
- endRow: 结束行(设置单元格格式)
- startCol: 起始列(设置单元格格式)
- endCol: 结束列(设置单元格格式)
- format: 表格或单元格格式,WordTableFormatDTO.java
java
/** Word 表格 - 常用属性 */
@Getter
@Setter
public class WordTableFormatDTO {
public WordTableFormatDTO() { toDefault(); }
private TableWidthType widthType;// 表格宽度类型(PCT-百分比)
private String width;// 表格宽度
private TableRowAlign align;// 表格对齐方式(该表格在行内的对齐方式,不是表格内容的对齐方式)
private int rowHeight;// 行高
private ParagraphAlignment cellAlign;// 单元格对齐方式
private XWPFTableCell.XWPFVertAlign cellValign;// 单元格垂直对齐方式
private int cellSpaceBefore;// 单元格段前空白
private int cellSpaceAfter;// 单元格段后空白
private String bgColor;// 单元格背景色
/** 默认格式 */
public void toDefault() {
widthType = TableWidthType.PCT;// 宽度类型:百分比
width = "100%";// 宽度:100%
align = TableRowAlign.CENTER;// 对齐方式:居中
rowHeight = 400;// 行高:400
cellAlign = ParagraphAlignment.CENTER;// 单元格对齐方式:居中
cellValign = XWPFTableCell.XWPFVertAlign.CENTER;// 单元格垂直对齐方式:居中
cellSpaceBefore = 0;// 单元格段前空白:0
cellSpaceAfter = 0;// 单元格段后空白:0
bgColor = "FFFFFF";// 单元格背景色:白色
}
}
2.4 写图片
注意
- 支持的图片格式:jpg、jpeg、png、gif、tiff、bmp
- 2.4.1 表格内插入图片
说明
- 方法1:在表格内的标签位置插入图片,自动调整宽高(默认原图宽高,超过A4尺寸的图按比例缩小,最大宽600px最大高930px)
- 方法2:在表格内的标签位置插入图片,自定义宽高
参数说明
- doc: 要操作的文档
- keyStr: 插入位置标签(例如:word模板中${data1},则传入"data1")
- imgFile: 待插入图片
- width: 图片宽度(单位:px)
- height: 图片高度(单位:px)
- isAppend: 写入后是否保留原标签,用于再次写入(true保留,false不保留)
- 2.4.2 非表格插入图片
说明
- 方法1:在表格外的标签位置插入图片,自动调整宽高(默认原图宽高,超过A4尺寸的图按比例缩小,最大宽600px最大高930px)
- 方法2:在表格外的标签位置插入图片,自定义宽高
参数说明
- 参数同上 2.4.1
2.5 写HTML
注意
- 写入html时,会自动清除掉html标签,只保留文字内容
- 若html内有图片,自动识别图片地址,支持3种类型图片,并自动调整宽高(默认原图宽高,超过A4尺寸的图按比例缩小,最大宽600px最大高930px)
- 网络图片:图片网址,如:
https://www.example.com/image.jpg
- 本项目图片:以本项目api地址开头的图片地址,如:
https://yanshi.java119.cn/dashuserver/upload/xxx/image.jpg
- 本地图片:服务器上的图片,绝对路径,如:/usr/local/image.jpg
说明
- 方法1:写入无格式的html内容
- 方法2:写入自定义格式的html内容
参数说明
- doc: 要操作的文档
- key: 插入位置标签(例如:word模板中${data1},则传入"data1")
- html: 待写入html内容
- format: 文本常用格式设置(WordStrFormatDTO 见:2.2.1)
- isAppend: 写入后是否保留原标签,用于再次写入(true保留,false不保留)