废话不多说,导入如下2个依赖,冲冲冲......
implementation group: 'com.lowagie', name: 'itext', version: '2.1.7'
implementation group: 'com.lowagie', name: 'itext-rtf', version: '2.1.7'
工具类正文
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.rtf.RtfWriter2;
import com.zfyfw.dto.TableDto;
import com.zfyfw.dto.TextDto;
import com.zfyfw.dto.WordContent;
import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class CreateDocUtil {
// private static Logger log = Logger.getLogger(CreateDocUtil.class);
public static void createDocument(String filePath, String fileName, List datas){
// 输出文件
File outFile = new File(filePath + File.separator + fileName + ".doc");
// 如果输出目标文件夹不存在,则创建
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
//创建Word文件,设置纸张的大小
Document document = new Document(PageSize.A4);
try {
//创建word文档
RtfWriter2.getInstance(document,new FileOutputStream(outFile));
//打开文档
document.open();
if (!datas.isEmpty()) {
for (WordContent data : datas) {
JSONObject jsonObject = JSONUtil.parseObj(data);
String textJson = jsonObject.getStr("text");
String tableJson = jsonObject.getStr("table");
if (textJson != null) {
//如果有标题就创建标题
if (data.getText().getTitle() != null) {
Paragraph header = new Paragraph(data.getText().getTitle(), new Font(Font.NORMAL, 12, Font.BOLD, new Color(0, 0, 0)));
header.setAlignment(Element.ALIGN_CENTER);
//写入标题
document.add(header);
}
//创建段落
Paragraph paragraph = new Paragraph(data.getText().getContent(), new Font(Font.NORMAL, 10, Font.BOLD, new Color(0, 0, 0)));
//设置段落为左对齐
paragraph.setAlignment(Element.ALIGN_LEFT);
//写入段落
document.add(paragraph);
}
if (tableJson != null) {
String[] columns = data.getTable().getHeader();
String[] tabContents = data.getTable().getInformation();
//创建多个表格
Table aTable = new Table(columns.length);
for (String column : columns) {
//把表格上方的标题创建出来
aTable.addCell(new Cell(column));
}
//把数据填写到表格中,只要够了表格数量会自动换行
for (String table : tabContents) {
aTable.addCell(new Cell(table));
}
document.add(aTable);
document.add(new Paragraph("n"));
}
}
}
//关流
document.close();
System.out.println("输出成功!");
} catch (FileNotFoundException | DocumentException e) {
System.out.println("生成文档失败!");
e.printStackTrace();
}
}
public static void main(String[] args) throws FileNotFoundException {
List datas = new ArrayList<>();
WordContent wordContent = new WordContent();
TextDto textDto = new TextDto();
textDto.setTitle("我就是我,不一样的烟火!");
textDto.setContent("壬戌之秋,七月既望,苏子与客泛舟游于赤壁之下。清风徐来,水波不兴。举酒属客,诵明月之诗,歌窈窕之章。少焉,月出于东山之上,徘徊于斗牛之间。白露横江,水光接天。" +
"纵一苇之所如,凌万顷之茫然。浩浩乎如冯虚御风,而不知其所止;飘飘乎如遗世独立,羽化而登仙。 于是饮酒乐甚,扣舷而歌之。歌曰:“桂棹兮兰桨,击空明兮溯流光。渺渺兮予怀," +
"望美人兮天一方。”客有吹洞箫者,倚歌而和之。其声呜呜然,如怨如慕,如泣如诉,余音袅袅,不绝如缕。舞幽壑之潜蛟,泣孤舟之嫠妇。 苏子愀然,正襟危坐而问客曰:“何为其然也?”客曰:" +
"“月明星稀,乌鹊南飞,此非曹孟德之诗乎?西望夏口,东望武昌,山川相缪,郁乎苍苍,此非孟德之困于周郎者乎?方其破荆州,下江陵,顺流而东也,舳舻千里,旌旗蔽空,酾酒临江," +
"横槊赋诗,固一世之雄也,而今安在哉?况吾与子渔樵于江渚之上,侣鱼虾而友麋鹿,驾一叶之扁舟,举匏樽以相属。寄蜉蝣于天地,渺沧海之一粟。哀吾生之须臾,羡长江之无穷。挟飞仙以遨游" +
",抱明月而长终。知不可乎骤得,托遗响于悲风。” 苏子曰:“客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,则天地曾不能以一瞬;自其不变者" +
"而观之,则物与我皆无尽也,而又何羡乎!且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭,是造物者" +
"之无尽藏也,而吾与子之所共适。”客喜而笑,洗盏更酌。肴核既尽,杯盘狼籍。相与枕藉乎舟中,不知东方之既白。 ");
wordContent.setText(textDto);
TableDto tableDto = new TableDto();
tableDto.setHeader(new String[]{"项目类别", "实施方案", "规划环评", "大纲+报告书", "仅大纲", "报告书", "报告表", "补充报告", "补充报告书", "补充报告表"});
tableDto.setInformation(new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9"});
wordContent.setTable(tableDto);
datas.add(wordContent);
JSONArray objects = JSONUtil.parseArray(datas);
System.out.println(objects);
createDocument("E:\app\test\igw","我是你爸爸", datas);
}
}
以下是封装的实体类
import lombok.Data;
@Data
public class WordContent {
private TextDto text;
private TableDto table;
private PhotoDto photo;
}
public class TableDto {
private String[] header;
private String[] information;
}
@Data
public class TextDto {
private String title;
private String content;
}
@Data
public class PhotoDto {
private String photo;
}
本文还在探索与完善中,望能与大家探讨;
操作word文档一般有下载、查看、打印等等功能..........
以下有前辈的笔记
使用ITEXT创建word表格_慕课手记
如何把图片转换成base64在后台转换成图片放在本地_慕课手记
Java 打印Word文档 - E-iceblue - 博客园



