美文网首页
pythonhtml2image: imgkit 和 wkhtm

pythonhtml2image: imgkit 和 wkhtm

作者: 顾慎为 | 来源:发表于2018-07-12 17:24 被阅读606次

场景

需要根据信息,将一个动态页面生成图片。
经过调研,发现只有imgkit符合要求。
imgkit其实是调用wkhtmltopdfwkhtmltoimagewkhtmltopdf包含wkhtmltopdfwkhtmltoimage两个工具)来实现功能。
wkhtmltopdfwkhtmltoimage是通过调用QT来实现功能:

wkhtmltopdf and wkhtmltoimage are command line tools to render HTML into PDF and various image formats using the QT Webkit rendering engine.

$PATH

imgkit中,通过

self.wkhtmltoimage = subprocess.Popen(['which', 'wkhtmltoimage'], stdout=subprocess.PIPE).communicate()[0].strip()

来获取wkhtmltoimage工具。

我在shell下,以及IPython中都可以正确获得结果,但是在PyCharm中一直返回空字符串。解决办法是设置系统变量$PATH。或者使用imgkit文档中的方法:

config = imgkit.config(wkhtmltoimage='/opt/bin/wkhtmltoimage')
imgkit.from_string(html_string, output_file, config=config)

就是把wkhtmltoimage的路径传入即可。

安装:Mac OSX VS Linux Ubuntu

wkhtmltoimage的Github页面写的安装方法都不能用!
Mac OSX操作系统下,不能使用brew install wkhtmltopdf安装,必须下二进制包。
Ubuntu操作系统下,很悲剧,通过sudo apt-get install wkhtmltopdf安装的包是阉割版。
我跑程序的时候Mac可以用,但是一到服务器上就报错,找了半天,居然就在上面这条命令下方,文档中写道:

Warning! Version in debian/ubuntu repos have reduced functionality (because it compiled without the wkhtmltopdf QT patches), such as adding outlines, headers, footers, TOC etc. To use this options you should install static binary from wkhtmltopdf site or you can use this script.

注意这句:because it compiled without the wkhtmltopdf QT patches
没有QT就报错。
Ubuntu上的安装其实还是得去下二进制包了。

长宽

在html页面中写<meta name="viewport" content="width=375, height=667">是没用的。必须使用imgkit中的option来设置。

    options = {
        'width': width,
        'height': height,
        'encoding': 'UTF-8',
    }
    data = imgkit.from_string(html, False, config=config, options=options)

这个问题简单,文档中写得很清楚。

无法展示

Ubuntu上报错:QXcbConnection: Could not connect to display
通过搜索,找到以下信息:
https://github.com/ContinuumIO/anaconda-issues/issues/1806
https://github.com/ipython/ipython/issues/10627

是因为Ubuntu上无法展示图片导致(但是哪里设置需要去展示了呢,我根本没打开生成的图片)。所以通过设置环境变量来规避。

os.environ['QT_QPA_PLATFORM']='offscreen'
os.environ['DISPLAY']=':0.0'

中文/Font

万事具备,但是Mac上中文就是能够正确展示,Ubuntu上就是框框(连乱码都没有)。

后来通过搜索,找到以下信息:
http://www.cnblogs.com/liangml/p/6421573.html
linux 安装 wkhtmltopdf 中文乱码或者空白解决方法
https://stackoverflow.com/questions/11859872/wkhtmltopdf-encoding-issue
https://stackoverflow.com/questions/11446894/unicode-chars-are-converted-to-broken-symbols-when-i-use-wkhtmltopdf
https://blog.yctin.com/install-wkhtmltopdf-wkhtmltoimage-to-centos-with-chinese-asian-fonts-support/
https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2128

按图索骥,我先尝试了很多办法,比如更改html文本的font-family<meta charset="utf-8">,更改options的值encoding: 'gbk',都没起效。

最后来看,应该就是缺少字体文件导致。
具体来讲,在我的Mac上的/Library/Fonts/Microsoft路径下,找到SimSun.ttf文件。
然后将文件拷贝到Ubuntu下的/usr/share/fonts
同时,在html文本的<head></head>标签下添加字体设置。

    <style>
        * {
            padding: 0;
            margin: 0;
            font-family: SimSun;
        }
    </style>

就好了。

感想……

wkhtmltopdf的文档真是。。。▄█▀█●
像解谜一样。。。。

相关文章

  • pythonhtml2image: imgkit 和 wkhtm

    场景 需要根据信息,将一个动态页面生成图片。经过调研,发现只有imgkit符合要求。imgkit其实是调用wkht...

  • HTML转图片利器:wkhtmltox

    摘要: 原创出处 http://peijie2016.gitee.io 欢迎转载,保留摘要,谢谢! 关于wkhtm...

  • html转图片

    python中html转图片,以下是在centos7中步骤 pip安装imgkit,pip install img...

  • python制作pdf电子书

    python制作pdf电子书 准备 制作电子书使用的是python的pdfkit这个库,pdfkit是 wkhtm...

  • Python 使用 imgkit 将网页保存为图片

    目标:需要定时截屏网页内容,然后将网页保存成图片的格式。 1、准备工作 安装imgkit包 安装:wkhtmlto...

  • -和 和 -

    产品介绍:和和是一款会员制共享平台;所有 经营者可在APP内注册和和商家成为会员供 应商(实体店、网店、微商、平台...

  • &和&&,|和||

    原文:https://blog.csdn.net/chinabestchina/article/details/7...

  • 和可和,非常和

    我年纪很小的时候,父亲有一本笔记本,上面只写了一句话:万物并育而不相害,道并行而不相悖。我当时很喜欢这句话,所以期...

  • kotlin中的空? 和 ?. 和 ?: 和 as? 和 !!

    ? 可空类型 kotlin和Java的类型系统之间的一个很重要的区别就是,Kotlin对可空类型的显示支持 也就是...

  • self. 和 _ 和 = 和 set

    声明了一个属性 @property (a,b) p1; 只有用self.调用时修饰关键词才起作用, 用_调用...

网友评论

      本文标题:pythonhtml2image: imgkit 和 wkhtm

      本文链接:https://www.haomeiwen.com/subject/tnskpftx.html