版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33333654/article/details/83780548
1.检查是否安装了wkhtmltopdf
2.若安装,检查是否配置了path的环境变量。可通过cmd输入 wkhtmltopdf -V 来尝试。
3.若环境变量以配置,测试下wkhtmltopdf是否能正常使用。可在cmd命令中输入 wkhtmltopdf www.baidu.com aaaaaa.pdf 点击回车,cmd面板会显示生成100%并且success,可以在user目录下搜索aaaaaa.pdf,看是否存在。注意这里命令的第二个是网址,页可以指定html文件,第三个是要生成的pdf名字,不要写路径,有时候路径会生成失败。
4.若以上都没有问题,那么存在一个非常恶心的清空,就是IDEA检测不到wkhtmltopdf的环境变量。可以在IDEA的Terminal中输入
wkhtmltopdf -V 命令来检查是否检测到了环境变量。若是没有那么就需要修改代码了。
核心代码如下:
String jsonData = JsonUtil.toJson(data); String htmlStr = ResourceUtil.getResourceAsString("/import/import_preview_tpl.html"); htmlStr = htmlStr.replace("@{cdn}", mediaServer); htmlStr = htmlStr.replace("@{data}", jsonData); String htmlPath = FileUtil.randomTempFilePath(".html"); FileUtil.createStringFile(htmlPath, htmlStr); // generate pdf String pdfPath = FileUtil.randomTempFilePath(".pdf"); List<String> cmd = new ArrayList<>(); cmd.add("D:\\wkhtmltopdf\\bin\\wkhtmltopdf");//注意这里要指定自己的安装目录了 cmd.add("-s"); cmd.add("letter"); cmd.add("-T"); cmd.add("0"); cmd.add("-B"); cmd.add("0"); cmd.add("-L"); cmd.add("0"); cmd.add("-R"); cmd.add("0"); cmd.add(htmlPath); cmd.add(pdfPath); CmdUtil.executeCmd(cmd);
CmdUtil中的executeCmd方法:
public static void executeCmd(List<String> cmd) { try { ProcessBuilder pb = new ProcessBuilder(cmd); pb.redirectErrorStream(true); Process process = pb.start(); BufferedReader errStreamReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = errStreamReader.readLine(); while (line != null) { logger.info(line); line = errStreamReader.readLine(); } process.waitFor(); } catch (IOException e) { throw new LearningGenieRuntimeException("Execute cmd failed.", e); } catch (InterruptedException e) { throw new LearningGenieRuntimeException("Execute cmd failed.", e); } }