我有一个运行在远程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的扩展,但我不确定是哪个(再次,我运行了一个在线搜索,但我在这一点上比其他任何东西都更困惑。我在堆栈溢出上发现了类似的线程,但与我遇到的问题完全不同)。任何帮助都将深表感谢。
非常感谢,向你致以最好的问候,伯蒂
发布于 2019-12-14 01:20:56
我找到了解决办法。
事实证明,解决方案在消息中非常明确,但我们以某种方式设法忽略了这一点。
所以在使用这个命令sudo apt-get install xvfb之后,
我们所要做的就是在options dict中添加{"xvfb": ""}并将其传递给方法。
例如:
options={'xvfb': ''}
imgkit.from_url('http://google.com', 'out.png', options=options)我希望这对你有帮助!
发布于 2019-10-30 00:13:41
我没有找到我的问题的答案: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:"Could not connect to display" on EC2 Server时错过了
注意:您可以结合使用1)和2):使用wkhtmltopdf直接转换为png,但使用虚拟显示(否则png将不会显示结果图像,至少对我来说是这样)。
我觉得这能帮上忙。:) Berti
我在我的解决方案中有一个错误(现在已经修复):2):它应该是"filenameOut.png“而不是"filenameOut.html”
https://stackoverflow.com/questions/58556282
复制相似问题