上周产品给了需求要求根据参数动态导出excel。结果使用了已有的大多数开源插件并不能满足需求。退而求次,导出pdf文件,让用户通过wps转为excel。
因为以前没有做过这种东西。在github搜到了基础的方法。在其基础上进行封解决了遗留问题。
原实现方法:SpringBoot + Freemarker +itext 渲染 html 导出 PDF
上面的代码已经完美的实现了通过 freemarker iText 渲染 html 模板导出 PDF。但是项目存在微小的瑕疵。
经过一下午的研究。完美解决了相对路径的问题。并成功的在线上环境运行
主要实现的思路是将文件写入到系统默认的临时文件夹。解决打包成jar后无法获取模板文件的问题
private static String getTempPath(String fileName, String srcPath) {
try {
File baseDirFile = FileUtils.getTempDirectory();
String filePath = baseDirFile.getCanonicalPath() + File.separator + fileName;
File f = new File(filePath);
if (!f.exists()) {
Files.createFile(f.toPath());
}
Resource srcRes = resourceLoader.getResource(ResourceUtils.CLASSPATH_URL_PREFIX + srcPath);
Files.copy(srcRes.getInputStream(), f.toPath(), StandardCopyOption.REPLACE_EXISTING);
return filePath;
} catch (IOException ex) {
logger.error("create temp font fail, ex:", ex);
}
return "";
}
完整代码地址:freemarker-pdf