imgkit分辨率_pythonhtml2image: imgkit 和 wkhtmltoimage的坑

场景

需要根据信息,将一个动态页面生成图片。

经过调研,发现只有imgkit符合要求。

imgkit其实是调用wkhtmltopdf的wkhtmltoimage(wkhtmltopdf包含wkhtmltopdf和wkhtmltoimage两个工具)来实现功能。

wkhtmltopdf和wkhtmltoimage是通过调用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页面中写是没用的。必须使用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和,更改options的值encoding: 'gbk',都没起效。

最后来看,应该就是缺少字体文件导致。

具体来讲,在我的Mac上的/Library/Fonts/Microsoft路径下,找到SimSun.ttf文件。

然后将文件拷贝到Ubuntu下的/usr/share/fonts。

同时,在html文本的标签下添加字体设置。

就好了。

感想……

wkhtmltopdf的文档真是。。。▄█▀█●

像解谜一样。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql sql组合_详解mysql 组合查询

使用UNION多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)有两种情况需要使用组合查询:在单个表查询中从不同的表返回类似结构的…

mysql 共享表空间存储_MySQL InnoDB共享表空间

简介ibdata1ibdata1文件是InnoDB存储引擎的共享表空间文件,存放位置my.ini 中的 datadir"D:\phpStudy\MySQL\data",目录下。查看innode_file_per_table 参数的状态show variables like %per_table;表空间Innodb存储引擎可将所有数据存放于ibda…

python36中文手册_python36中文手册_python_36_文件操作4

fopen(test.txt,a,encodingutf-8)#f.truncate()#截断,不指定将清空所有内容f.truncate(5)#从头开始截断,截断5个字符 注:使用f.seek()改变光标位置不顶用f.close()fopen(yesterday,r,encodingutf-8)#读写文件print(f.readline())print(f.read…

bigdecimal负数变正数_BigDecimal的用法详解

BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广…

mysql 表引擎 entity framework_EntityFramework之数据库以及表基本创建(一)

前言之前有学过EF一段时间那时EF才4.0似乎还不太稳定,而现在EF都已7.0版本,同时AspNet Identity都与此大有关联,看来是大势所趋于是开始学习EF,在学EF过程中也遇到一些小问题,特此录下,以备忘!数…

mysql+linux+无法启动服务无法启动不了_Linux实例中MySQL服务常见的无法启动或启动异常处理...

概述本文介绍了在Linux实例中,MySQL常见的无法启动或启动异常处理方法。详细描述常见问题处理描述,目录如下。提示:MySQL错误日志通常记录在/alidata/log/mysql/error.log文件下。MySQL配置文件my.cnf权限问题导致无法启动,错误提…

python3缺少pip_Ubuntu中找不到pip3命令的解决方法

Ubuntu中找不到pip3命令的解决方法Ubuntu 有 python2 和 python3。今天使用 Ubuntu 中的 python3 时,想要安装第三方库却发现 pip 指向的是 python2 。因为记得 Ubuntu 系统默认将 python3 的 pip 命令改成了 pip3,于是执行 pip3 -V ,报命令不…

python库迁移到没有网的电脑_python实现数据库跨服务器迁移

数据库从一个服务器转移到另外一个服务器,怎么转?你可以用一分钟遇见一个人,用一小时了解一个人,用一天爱上一个人,但是你却要用一辈子忘记一个人。分离,附加?还是备份、还原?具体过…

45道mysql数据库题目_MySQL 45道练习题

--1、 查询Student表中的所有记录的Sname、Ssex和Class列。SELECT sname,ssex,class FROMstudent;--2、查询教师所有的单位即不重复的Depart列SELECT DISTINCT depart FROMteacher;--3、查询Student表的所有记录。SELECT * FROMstudent;--4、查询Score表中成绩在60到80之间的所…

linux mysql revoke_Linux环境下MySQL基础命令(4)----数据库的用户授权

MySQL数据库的root用户拥有对所有库,表的全部权限,频繁的使用root用户会给数据库带来很大的风险,因此应建立一些低权限用户,只负责一部分库、表的管理维护操作,甚至可以对增、删、改、查各个操作进一步细化限制&#x…

mysql更改表 值_如何更改MySQL表中行实例的值?

UPDATE命令以及WHERE子句可用于更改行实例的值。基本上,MySQL将根据查询中给出的条件更改值。下面的例子可以证明它假设我们想在下面给出的“测试”表中将名称从“ Ram”更改为“ Mohit”-mysql> Select * from testing;-------------| Id | Name |----------…

java创建型_Java创建型模式

Java创建型模式在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。创建型模式…

java interface 实例_Java - Interface 接口的实现方式实例

在程序的开发中,需要完成两个数的求和运算和比较运算功能的类非常多。那么可以定义一个接口来将类似的功能组织在一起。下面创建一个示例,具体介绍接口的实现方式。1)创建一个名称为 IMath 的接口,代码如下:1 public interfaceIMa…

java查看 被应用_java – 如何查看应用程序正在使用的当前堆大小?

使用此代码:// Get current size of heap in byteslong heapSize Runtime.getRuntime().totalMemory();// Get maximum size of heap in bytes. The heap cannot grow beyond this size.// Any attempt will result in an OutOfMemoryException.long heapMaxSize …

java gc机制新区域旧屋_Java 内存回收机制——GC机制-Go语言中文社区

一、Java GC 概念说明Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不…

上古卷轴5java8_【图片】【上古卷轴5】【无心】个人整合版8.0【霜刃伤情吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼GameModeSkyrimSkyrim.esm1Update.esm1Unofficial Skyrim Patch.esp1Dawnguard.esm1Unofficial Dawnguard Patch.esp1HearthFires.esm1Unofficial Hearthfire Patch.esp1Dragonborn.esm1Unofficial Dragonborn Patch.esp1Skyrim Pr…

java反射 虚拟机优化_面试官问我:Java反射是什么?我回答竟然不上来......

每天凌晨00点00分,第一时间与你相约每日英文We all have moments of desperation. But if we can face them head on, that’s when we find out just how strong we really are.我们都有绝望的时候,只有在勇敢面对时,我们才知道我们有多坚强。每日掏心话…

mysql解压包安装linuex_CentOS下安装Apache,php,Mysql

第一步:通过yum安装php,mysql,httpd,这里默认使用CentOS提供的默认版本,版本较低。#yum install httpd mysql-server php php-devel php-mysql所有的安装包大小为25M,大概2分钟左右就能下载安装完成。第二步…

c java 开发效率高_Java 的开发效率究竟比 C++ 高在哪里?

如果选择C,那C 的难度与JAVA 比,那应该不在一个层次。因为 C 作者及委员会想给你带来足够的抽象能力,让你可以抽象这个世界;给你足够的自由与控制硬件的能力,及零开销的高性能。简单点说,C程序员如同神一般…

java sub,Java 9子软件包跨模块拆分

In Java 9, can I split sub-packages across modules? For example, can I have com.example.foo in one module and com.example.foo.bar in another module?This seems like a simple question, but for some reason Im not able to find a direct answer after some sear…