解决IDEA启动wkhtmltopdf问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33333654/article/details/83780548