1
2
3
4
5
6
| public static void main(String[] args) throws Exception {
Map<String, Object> data = new HashMap<>();
data.put("title","放肆-Vae");
data.put("content","你的放肆烧燃起怒火,我的放肆如大雨滂沱;你的放肆掀风起云涌,我的放肆平沧海澜波。");
GenerateDocxUtil.freemarkerDocxTest("/Users/weichenxu/Downloads/worddocx/temp/",data,"/Users/weichenxu/Downloads/worddocx/file/放肆.docx");
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
| public class GenerateDocxUtil {
private static Logger logger = LoggerFactory.getLogger(GenerateDocxUtil.class);
public static void freemarkerDocxTest(String rootPath, Map<String,Object> dataMap, String docxPath) throws Exception{
Configuration configuration = new Configuration();
String fileDirectory = rootPath;
configuration.setDirectoryForTemplateLoading(new File(fileDirectory));
String temName = "tem1.xml";
String docxZipPath = rootPath + "tem1.zip";
Template template = configuration.getTemplate(temName);
String outFilePath = rootPath + UUID.randomUUID().toString().replace("-","") + ".xml";
File docXmlFile = new File(outFilePath);
FileOutputStream fos = new FileOutputStream(docXmlFile);
Writer out = new BufferedWriter(new OutputStreamWriter(fos),10240);
template.process(dataMap,out);
if(out != null){
out.close();
}
ZipInputStream zipInputStream = wrapZipInputStream(new FileInputStream(new File(docxZipPath)));
ZipOutputStream zipOutputStream = wrapZipOutputStream(new FileOutputStream(new File(docxPath)));
List<String> itemNameList = new ArrayList<>();
itemNameList.add("word/document.xml");
itemNameList.add("word/media/image1.png");
List<InputStream> itemInputStreamList = new ArrayList<>();
itemInputStreamList.add(new FileInputStream(new File(outFilePath)));
itemInputStreamList.add(new FileInputStream(new File(${图片路径})));
replaceItemList(zipInputStream, zipOutputStream, itemNameList, itemInputStreamList);
new File(outFilePath).delete();
logger.info("Word-docx文档生成完成");
}
public static ZipInputStream wrapZipInputStream(InputStream inputStream){
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
return zipInputStream;
}
public static ZipOutputStream wrapZipOutputStream(OutputStream outputStream){
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
return zipOutputStream;
}
public static void replaceItemList(ZipInputStream zipInputStream, ZipOutputStream zipOutputStream, List<String> itemNameList, List<InputStream> itemInputStreamList){
if(null == zipInputStream){return;}
if(null == zipOutputStream){return;}
ZipEntry entryIn;
try {
while((entryIn = zipInputStream.getNextEntry())!=null){
String entryName = entryIn.getName();
ZipEntry entryOut = new ZipEntry(entryName);
zipOutputStream.putNextEntry(entryOut);
byte [] buf = new byte[8*1024];
int len;
if(itemNameList.indexOf(entryName) != -1){
while((len = (itemInputStreamList.get(itemNameList.indexOf(entryName)).read(buf))) > 0) {
zipOutputStream.write(buf, 0, len);
}
} else {
while((len = (zipInputStream.read(buf))) > 0) {
zipOutputStream.write(buf, 0, len);
}
}
zipOutputStream.closeEntry();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
for (InputStream itemInputStream:itemInputStreamList) {
close(itemInputStream);
}
close(zipInputStream);
close(zipOutputStream);
}
}
private static void close(InputStream inputStream){
if (null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void close(OutputStream outputStream){
if (null != outputStream){
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} |