时序图
代码实现
public FileDTO createNoticeLetter(NoticeCondition condition) {
FileDTO res = null;
Map philipp = getMap(condition);
FileInputStream tempFile = null;
InputStream inputStream = null;
// 获取临时存储地址
String uuid = UUID.randomUUID().toString();
String tmpdir = uuid + ".docx";
try {
// 存放到项目 resource 文件夹中
ClassPathResource classPathResource = new ClassPathResource("/docx-template/bankTemplate.docx");
inputStream = classPathResource.getInputStream();
log.info("告客户书获取模板文件输入流");
// 设置变量内容
WordprocessingMLPackage template = WordprocessingMLPackage.load(inputStream);
// 填充模板文件
Docx4JSRUtil.searchAndReplace(template, philipp);
FileOutputStream outputStream = new FileOutputStream(new File(tmpdir),true);
template.save(outputStream);
outputStream.flush();
log.info("告客户书模板文件填充完成{}", condition.getPolicyId());
//获取本地文件
tempFile = new FileInputStream(tmpdir);
FileUploadReqDTO fileUploadReqDTO = FileUploadReqDTO.builder()
.mimetype("docx")
.name("告客户书.docx")
.build();
// 转byte[]
byte[] content = readInputStream(tempFile);
fileUploadReqDTO.setContent(ArrayUtils.toObject(content));
// 上传告客户书
res = Optional.ofNullable(fileFacade.upload(fileUploadReqDTO))
.orElseThrow(() -> new ServiceException("查询告客户书失败"));
} catch (Exception e) {
log.error("告客户模板下载失败", e);
} finally {
if(null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
log.error("告客户模板下载失败", e);
}
}
if (tempFile != null) {
try {
tempFile.close();
// 删除本地临时文件
File file = new File(tmpdir);
if(file.delete()){
log.info(file.getName() + " 文件已被删除!");
}else{
log.info(file.getName() + " 文件删除失败!");
}
} catch (IOException e) {
log.error("文件上传失败", e);
}
}
}
return res;
}
private Map getMap(NoticeCondition condition){
Map<String, String> philipp = Maps.<String, String>builder().put("${name}", "panda").build();
return philipp;
}
/**
* 从输入流中获取字节数组
*/
private static byte[] readInputStream(FileInputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
标签:docx,java,log,填充,tempFile,inputStream,new,word,byte
From: https://www.cnblogs.com/pandacode/p/16880554.html