在实际工作中遇到过生成合同模版的问题,这里解决方案之一吧:
1,首先通过工具把word 合同生成 xml 文档 ,直接另存为 XML 格式文档即可。然后保存为 .ftl 模版
2. 使用工具查询要替换更新的内容
3. 对模版的内容进行替换更新,本实例对生成 html2pdf 文档 还可优化 具体可参考 html2PDF 文章内容
代码:
1. 覆盖合同
@Override
public String uploadFile(File imagePath, String imagePathFileName,
Map<Object, Object> fileUrlConfig, String imageInfoPath) {
if (imagePath != null) {
// 1上传文件的类型
String typeStr = imagePathFileName.substring(imagePathFileName
.lastIndexOf("."));
// 判断图片后缀是否符合要求,忽略大小写的判断
try {
// 需要修改文件的后缀名称
String newName = imagePathFileName.substring(imagePathFileName
.lastIndexOf("."));
// 生成随机文件名:当前年月日时分秒+五位随机数(为了在实际项目中防止文件同名而进行的处理)
// String randomCode=Utils.getRandomCode();
String randomCode = String.valueOf(Calendar.getInstance()
.getTimeInMillis());
// 原始图片文件编译后的新名称
newName = randomCode + newName;
// 定义新文件保存实际路径+配置文件systemConfig.properties中定义的文件生成目录规则:年月日
String newImagePath = FileTypeUtil.getSerial(new Date(),
fileUrlConfig.get("fileRule")) + "/";
// 定义文件对象,需要加上盘符
File savefile = new File((fileUrlConfig.get("contractRoot")
+ "/" + newImagePath), newName);
// 判断文件是否存在,不存在则新创建
if (!savefile.getParentFile().exists()) {
savefile.getParentFile().mkdirs();
}
FileUtils.copyFile(imagePath, savefile);
imagePathFileName = newName;
// return imagePathFileName;
return savefile.toString();
} catch (IOException e) {
e.printStackTrace();
return "图片上传失败!";
}
}
return imagePathFileName;
}
2 word版合同
/**
* 根据合同模板生成word版合同, dataMap是表示生成合同所要传入的数据,所有的数据全部放在map中去,
* 并且map的key值必须跟合同模板中占位符的名字一致,如果值为空的话,一定要将其值赋值为空字符串;
* 模板中的占位符用${}包围起来;
* templateRootUrl是表示生成合同所需要模板的路径; contractRootUrl是表示生成的合同所放位置的路径;
* fileRuleUrl是代表生成合同所放路径目录的格式;
* templateName表示模板的名字
* 此方法的返回值是新生成的word合同的名字;
* @zp
*/
public String createWordContract(Map dataMap, String templateRootUrl,String contractRootUrl,
Object fileRuleUrl, String templateName) {
// 定义文本写入字符输出流,用于最终生成word合同
Writer out = null;
// 定义生成word合同文件的名字,也是最终的返回值
String fileN