首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(在Ubuntu服务器上使用'imgkit‘) wkhtmltopdf:无法连接到任何X显示器

(在Ubuntu服务器上使用'imgkit‘) wkhtmltopdf:无法连接到任何X显示器
EN

Stack Overflow用户
提问于 2019-10-25 17:57:54
回答 2查看 1.2K关注 0票数 2

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

代码语言:javascript
复制
import imgkit

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

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

代码语言:javascript
复制
sudo pip install imgkit

然后:

代码语言:javascript
复制
sudo apt-get install wkhtmltopdf

然后返回错误:

代码语言:javascript
复制
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": ""}.

到目前一切尚好。因此,我运行了以下命令:

代码语言:javascript
复制
sudo apt-get install xvfb

它起作用了。但是Ubuntu服务器仍然返回相同的错误。现在,首先,我不知道then add option: {"xvfb": ""}.是什么意思。我试着在网上寻找答案,人们之前引用了这句话,但没有解释一个人实际上应该做什么或在终端上写什么。我也觉得我错过了wkhtmltopdf的扩展,但我不确定是哪个(再次,我运行了一个在线搜索,但我在这一点上比其他任何东西都更困惑。我在堆栈溢出上发现了类似的线程,但与我遇到的问题完全不同)。任何帮助都将深表感谢。

非常感谢,向你致以最好的问候,伯蒂

EN

回答 2

Stack Overflow用户

发布于 2019-12-14 01:20:56

我找到了解决办法。

事实证明,解决方案在消息中非常明确,但我们以某种方式设法忽略了这一点。

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

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

例如:

代码语言:javascript
复制
options={'xvfb': ''}
imgkit.from_url('http://google.com', 'out.png', options=options)

我希望这对你有帮助!

票数 4
EN

Stack Overflow用户

发布于 2019-10-30 00:13:41

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

然而,我能够让我的代码正常工作。有两种解决方案。

1)使用wkhtmltopdf:

代码语言:javascript
复制
import os

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

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

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

代码语言:javascript
复制
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:"Could not connect to display" on EC2 Server时错过了

注意:您可以结合使用1)和2):使用wkhtmltopdf直接转换为png,但使用虚拟显示(否则png将不会显示结果图像,至少对我来说是这样)。

我觉得这能帮上忙。:) Berti

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58556282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档