2

我有一个在远程 Ubuntu 服务器上运行的 python 脚本。在我的代码中,我创建了一个 HTML 文件,然后将其转换为 png。因此,我选择使用 imgkit,它可以很好地完成工作(在将 python 脚本上传到远程 Ubuntu 服务器之前,我在我的 Mac OS 上测试了我的代码):

import imgkit

imgkit.from_url('MyFile.html', 'MyFile.png')

现在,问题是 Ubuntu 服务器没有安装 imgkit 和 wkhtmltopdf。所以我运行了以下命令:

sudo pip install imgkit

然后:

sudo apt-get install wkhtmltopdf

然后它返回错误:

QXcbConnection: Could not connect to display 
Could not connect to any X display.


You need to install xvfb(sudo apt-get install xvfb, yum install xorg-x11-server-Xvfb, etc), 
then add option: {"xvfb": ""}.

到目前为止,一切都很好。因此,我运行了以下命令:

sudo apt-get install xvfb

哪个有效。但是 Ubuntu 服务器仍然返回相同的错误。现在,一方面,我不知道什么:then add option: {"xvfb": ""}.甚至意味着。我试图在网上寻找答案,人们之前引用了这一点,但没有解释在终端中实际应该做什么或写什么。我也觉得我缺少 wkhtmltopdf 的扩展,但我不确定是哪个(再次,我进行了在线搜索,但此时我比其他任何事情都更困惑。我在堆栈溢出时发现了类似的线程,但没有什么比这个问题更我正在经历)。任何帮助将不胜感激。

非常感谢你 最好的问候, Berti

4

2 回答 2

4

我能够找到解决方法。

原来解决方案在消息中非常清楚,但我们不知何故设法忽略了这一点。

所以使用这个命令后sudo apt-get install xvfb

我们所要做的就是添加{"xvfb": ""}options dict 并将其传递给方法。

例如:

options={'xvfb': ''}
imgkit.from_url('http://google.com', 'out.png', options=options)

我希望这会有所帮助!

于 2019-12-13T17:20:56.183 回答
0

我没有找到我的问题的解决方案: then add option: {"xvfb": ""}

但是我能够让我的代码工作。有两种解决方案。

1)使用wkhtmltopdf:

import os

os.system("xvfb-run -a wkhtmltopdf %s %s"%('filenameIn.html','filenaneOut.png'))

这会生成一个 PDF 文件,而无需设置虚拟显示器。

2) 使用 pyvirtualdisplay 设置虚拟显示器:

import imgkit
from pyvirtualdisplay import Display

display = Display(visible=0, size=(600,600))
display.start()
imgkit.from_file("filenameIn.html", "filenameOut.png")
display.stop()

实际上,2) 之前已回答,我在搜索 StackOverflow 时错过了它:EC2 服务器上的“无法连接显示”

注意:可以结合1)和2):使用wkhtmltopdf直接转换成png,但是用虚拟显示(不然png不会显示生成的图片,至少我是这样)。

我认为这会有所帮助。:) 贝尔蒂

- - - - - - - - - - - - - - - - - - 编辑 - - - - - - - ----------------------

我的解决方案中有一个错误(现已修复):对于 2):它应该是“filenameOut.png”而不是“filenameOut.html”

于 2019-10-29T16:13:41.433 回答