当前位置: 首页 > article >正文

wkhtmltoimage/wkhtmltopdf 使用实践

1. 介绍

wkhtmltopdf/wkhtmltoimage 用于将简单的html页面转换为pdf或图片;

2.安装

downloads

2.1. mac os

下载64-bit 版本然后按照指示安装, 遇到 untrust developers 时,需要在 Settings -> Privacy 处信任下该安装包。
在这里插入图片描述在这里插入图片描述

2.2. debian

# 可用于Dockerfile中
apt update && apt install wkhtmltopdf

3. 使用

wkhtmltopdf&wkhtmltoimage 内嵌了一个QT浏览器,其原理是会使用该内嵌的浏览器打开html文件或链接,然后对该网页进行截图处理;

注意事项
(1) 导出的图片或pdf空白:由于wkhtmltopdf&wkhtmltoimage 0.12.6 最新版发布于 2020-7-11, 其使用的QT浏览器由于版本比较旧,可能会无法识别较新版本的javascript语法,比如我们使用的eCharts组件,那么此时我们需要降低echarts.js的版本, 可以参考example,这位老哥给出了一段html代码,经测试,可以被渲染出来;

(2) 导出的图片没有完全渲染完成:因为eChart生成的canvas通常有一个动画效果,我们可以通过添加 --javascript-delay 1000 参数延迟截取图片的时间。

3.1. eCharts Example

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js"></script>
<style>
    .reportGraph {width:900px}
</style>
</head>
<body>

<div class="reportGraph"><canvas id="canvas"></canvas></div>

<script type="text/javascript">
// wkhtmltopdf 0.12.5 crash fix.
// https://github.com/wkhtmltopdf/wkhtmltopdf/issues/3242#issuecomment-518099192
'use strict';
(function(setLineDash) {
    CanvasRenderingContext2D.prototype.setLineDash = function() {
        if(!arguments[0].length){
            arguments[0] = [1,0];
        }
        // Now, call the original method
        return setLineDash.apply(this, arguments);
    };
})(CanvasRenderingContext2D.prototype.setLineDash);
Function.prototype.bind = Function.prototype.bind || function (thisp) {
    var fn = this;
    return function () {
        return fn.apply(thisp, arguments);
    };
};

function drawGraphs() {
    new Chart(
        document.getElementById("canvas"), {
            "responsive": false,
            "type":"line",
            "data":{"labels":["January","February","March","April","May","June","July"],"datasets":[{"label":"My First Dataset","data":[65,59,80,81,56,55,40],"fill":false,"borderColor":"rgb(75, 192, 192)","lineTension":0.1}]},
            "options":{}
        }
    );
}
window.onload = function() {
    drawGraphs();
};
</script>
</body>
</html>
wkhtmltoimage --debug-javascript --enable-local-file-access --no-stop-slow-scripts --javascript-delay 1000 ./index.html index.jpg

!!!注意我们需要开启debug-javascript,这样当本地测试正常,但是抛出syntax error的时候,我们就知道需要降低我们使用javascript的语法格式以及eChart的版本了!!!
在这里插入图片描述

3.2. python 使用

# imgkit 是对 wkhtmltoimage的一层简单封装, 因此我们需要先安装好wkhtmltopdf
pip install imgkit
import imgkit
# html 是整个index.html文件的字符串
imgkit --from_string(html, output_path="/tmp/xxx.jpg", options={
"no-stop-slow-scripts": "",
"javascript-delay": 1000
})

Reference

wkhtmltoimage&wkhtmltopdf


http://www.kler.cn/news/108862.html

相关文章:

  • windows下基于vscode的ssh服务远程连接ubuntu服务器
  • 【java学习—十】HashSet集合(4)
  • Elasticsearch分词器-中文分词器ik
  • C语言之文件操作
  • Affinity Photo 2.2.1 高端专业Mac PS修图软件
  • 前后端交互系统:在Node.js中运行JavaScript
  • Python基础入门例程16-NP16 发送offer(列表)
  • 论文阅读——GPT3
  • AcWing89. a^b
  • vue数组中的变更方法和替换方法
  • 【PG】PostgreSQL客户端认证pg_hba.conf文件
  • 笔记44:Batch_Normlization 过程详解
  • openpnp - Warning - Unknown firmware
  • IEEE Standard for SystemVerilog—Chapter 25.7 Tasks and functions in interfaces
  • GZ035 5G组网与运维赛题第6套
  • eslint识别不了别名解决方法
  • C++可视化 有穷自动机NFA 有穷自动机DFA
  • Linux——文件权限属性和权限管理
  • Python学习——Day11--封装、继承、多态
  • NLP之搭建RNN神经网络
  • Python 框架学习 Django篇 (六) ORM关联
  • Ansible脚本进阶---playbook
  • lwip代码分析
  • 信息系统项目管理师教程 第四版【第6章-项目管理概论-思维导图】
  • 常用conda和pip命令总结
  • 构建外卖小程序:技术要点和实际代码
  • 【深度学习】使用Pytorch实现的用于时间序列预测的各种深度学习模型类
  • Ubuntu系统编译调试QGIS源码保姆级教程
  • C#两个表多条件关联写法
  • 基于springboot,vue校园社团管理系统