wkhtmltopdf:无法连接到X服务器


113

我一直在使用wkthmltopdf在Linux Web服务器上即时将html转换为pdf文档。该程序最初需要X11或类似的X服务器才能正确运行,但是通过开发人员的多次请求,要使其在不具有GUI的服务器上运行,我可以确定它在静态版本中运行虚拟X服务器。我一直在使用程序的静态(独立)版本,效果很好!我将可执行文件放在一个文件夹中,然后运行:

./wkhtmltopdf file1.html file2.pdf

但是,我想在系统范围内安装此程序。我使用了apt-get install wkhtmltopdf(昨天才安装),并且由于我在64位系统上运行,因此我也需要apt-get install ia32-libs。安装后,我可以找到这样的版本:

wkhtmltopdf --version

输出:

Name:
  wkhtmltopdf 0.9.9

License:
  Copyright (C) 2008,2009 Wkhtmltopdf Authors.



  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
  This is free software: you are free to change and redistribute it. There is NO
  WARRANTY, to the extent permitted by law.

Authors:
  Written by Jakob Truelsen. Patches by Mário Silva, Benoit Garret and Emmanuel
  Bouthenot.

现在,当我尝试运行通过aptitude安装的程序时,出现以下错误:

wkhtmltopdf: cannot connect to X server

有谁知道我该如何解决?我猜这个版本缺少虚拟X服务器或其他东西。

Answers:


206

或尝试一下(来自http://drupal.org/node/870058

  1. 下载wkhtmltopdf。或最好使用软件包管理器进行安装:

    sudo apt-get install wkhtmltopdf
    
  2. 提取并移至 /usr/local/bin/

  3. 将其重命名为,wkhtmltopdf这样您现在可以在/usr/local/bin/wkhtmltopdf
  4. 设置权限: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. 安装所需的支持包。

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. 检查它是否有效:运行

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    

    如果有效,那么您就完成了。如果收到错误“无法连接到X服务器”,则继续编号7。

  7. 我们需要在“虚拟” x服务器上无头运行它。我们将使用名为xvfb的软件包进行此操作。

    sudo apt-get install xvfb
    
  8. 我们需要编写一些shell脚本,将wkhtmltopdf包装在xvfb中。制作一个名为的文件wkhtmltopdf.sh并添加以下内容:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. 将此shell脚本移至/usr/local/bin,并设置权限:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. 检查它是否再次起作用:运行

    /usr/local/bin/wkhtmltopdf.sh http://www.google.com test.pdf
    

请注意,http://www.google.com可能会引发类似“完成的ResourceObject收到加载完成信号的错误。这可能表明iframe需要很长时间才能加载”。您可能需要使用更简单的页面进行测试http://www.example.com


1
我本来尝试过该教程,但效果并不理想,我也不喜欢必须使用符号链接创建包装器。就像我在答案中写的那样,如果您仅将静态可执行文件移动到/usr/bin/目录中,则可以在任何地方使用它。他们在静态可执行文件中添加了一个虚拟x服务器,因此无需制作包装脚本。
jeffery_the_wind 2012年

在某些情况下对我有用。该提示感谢-我想安装缺少32位库的固定对我来说
TimoSolo

6号语句的If you get the error "Cannot connect to X server" then continue to number 6.含义是什么?我对此很困惑。您是说继续排名第七吗?
Noz

是的,那是什么意思……原始文章对项目进行了错误编号。因此,继续进行#7
dwaz

谢谢,重编号了。尽管如此,建议的答案在大多数情况下仍然有效,因此请首先尝试
TimoSolo 2013年

61

这为我解决了这个问题:

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf

这是最简单,最安全的方法,因为wkhtmltopdf的标准安装不包括x服务器。
彼得

这是在大多数情况下解决“无法连接到X服务器”的方法。
三人房

2
在基于Redhat的发行版上使用sudo yum install xorg-x11-server-Xvfbresp。sudo dnf install xorg-x11-server-Xvfb
TNT

28

我试图做,sudo apt-get install wkhtmltopdf但是没有成功。相反,我建议您尝试:

  1. 下载最新的可执行文件(.11 rc1):

    wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

  2. 解压缩:

    tar -vxf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

  3. 重命名它:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod到可执行文件:

    chmod a+x wkhtmltopdf

  5. 将其放入/ usr / bin:

    sudo mv wkhtmltopdf /usr/bin



这对我https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
有用,

1
下载wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz现在对我有用。由于某种原因,最新的版本没有。
chasetheskyforever

1
我可以证实这个工作对我来说:(ATM获取最新的稳定版本)wget的download.gna.org/wkhtmltopdf/0.12/0.12.3/...焦油-vxf wkhtmltox-0.12.3_linux-仿制amd64.tar.xz搭配chmod A + x wkhtmltox / bin / wkhtmltopdf sudo mv wkhtmltopdf / usr / local / bin / wkhtmltopdf
Magico

27

刚做到:

1-下载wkhtmltopdf依赖项

# apt-get install wkhtmltopdf

2-从源下载

# wget http://downloads.sourceforge.net/project/wkhtmltopdf/xxx.deb

# dpkg -i xxx.deb

3-尝试

# wkhtmltopdf http://google.com google.pdf

工作正常

有用!


我必须apt-get install -f在安装软件包后运行以获得依赖项。否则就像一个魅力。与其他方法相比,该方法更喜欢这种方法。
dmuir

2
我同意。这个解决方案使我进入了当前的版本。dpkg -i命令确实生成了一些歧义信息,但是不管如何,它都起作用: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb随后sudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler

这仍然是提供给该问题的更好的解决方案。
versvs 2015年

1
我必须sudo mv wkhtmltopdf /usr/bin/usr/local/bin/目录运行,但是效果很好!我想这个网页上所有其他方法与前手没有运气..
shaneparsons

作为最新,更简单的解决方案,这应该得到更高的支持,而无需依赖其他软件包(这也解决了“无法连接到X服务器”的问题)。并且我在使用xvfb时无法加载相对的CSS路径有问题。
zynick '16

16

我找到了无需假X服务器即可解决此问题的方法。在最新版本的wkhtmltopdf中,不需要X服务器即可工作,但是它不需要进入正式的Linux系统信息库。

Ubuntu 14.04.4 LTS(可信赖)i386的解决方案

$ sudo apt-get install xfonts-75dpi
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-trusty-i386.deb
$ sudo dpkg -i wkhtmltox-0.12.2_linux-trusty-i386.deb
$ wkhtmltopdf http://www.google.com test.pdf

Ubuntu 14.04.4 LTS(可信)amd64的解决方案

$ sudo apt-get install xfonts-75dpi
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-trusty-amd64.deb
$ sudo dpkg -i wkhtmltox-0.12.2_linux-trusty-amd64.deb
$ wkhtmltopdf http://www.google.com test.pdf

用户felixhummel得到了很好的解决方案,但是带有utilite的存储库已更改。


由于某种原因,这对我有用,而较新的版本(0.13)则不谢谢您!
talsibony's

这是为我工作的解决方案,我尝试了很多其他解决方案,但没有一个起作用。由于我是php / Laravel环境的新手,所以我对这些库和依赖项没有很深入的了解,但是此解决方案简直就是节省了我的时间:)
Amit

真的,今天这个解决方案很棒,我投入生产并遇到了同样的问题,没有浪费我在运行这些解决方案的任何时间,它都能顺利进行:)
Amit

gna.org现在已关闭。:(
Jya

11

扩展蒂莫西的答案...

如果您是Web开发人员,希望将wkhtmltopdf用作Web应用程序的一部分,则可以将其安装到/usr/bin/文件夹中,如下所示:

cd /usr/bin/
curl -C - -O http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
tar -xvjf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
mv wkhtmltopdf-i386 wkhtmltopdf

现在,您可以使用在任何地方运行它wkhtmltopdf

我个人使用PHP中的Snappy库。这是创建PDF多么容易的示例:

<?php

// Create new PDF
$pdf = new \Knp\Snappy\Pdf('wkhtmltopdf');

// Set output header
header('Content-Type: application/pdf');

// Generate PDF from HTML
echo $pdf->getOutputFromHtml('<h1>Title</h1><p>Your content goes here.</p>');

11

从SourceForge更新到最新的wkhtmltopdf版本(在撰写本文时为0.12)。它不需要X Server即可运行。

Ubuntu 14.04的示例:

$ cd /tmp/                                                                                                                                                                                                       
$ wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
$ dpkg -x wkhtmltox-0.12.2.1_linux-trusty-amd64.deb foo

$ echo '<p>hi</p>' | ./foo/usr/local/bin/wkhtmltopdf - /tmp/hi.pdf
Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done                                                                      

$ head -n3 /tmp/hi.pdf 
%PDF-1.4
1 0 obj
<<

1
我已经安装了0.12.1,它仍然提示我无法连接到X服务器。我想念什么吗?
Ales Maticic

再次尝试,这对我有用(无需安装,仅用于保持包装盒清洁)。请参阅上面的编辑。
felixhummel 2015年

9

适用于14.04.1-Ubuntu https://wkhtmltopdf.org/downloads.html

wget https://downloads.wkhtmltopdf.org/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz -O mktemp.tar.xz
tar xf mktemp.tar.xz
sudo cp wkhtmltox/bin/wkhtmltopdf /usr/bin/wkhtmltopdf
sudo chmod +x /usr/bin/wkhtmltopdf
rm mktemp.tar.xz
rm wkhtmltox -rf
apt-get update
apt-get install -y libxrender1 libxtst6 libxi6
wkhtmltopdf http://www.google.com test.pdf

6
sudo -i
apt-get install wkhtmltopdf xvfb libicu48
mv /usr/bin/wkhtmltopdf /usr/bin/wkhtmltopdf-origin
touch /usr/bin/wkhtmltopdf && chmod +x /usr/bin/wkhtmltopdf && cat > /usr/bin/wkhtmltopdf << END
#!/bin/bash

/usr/bin/xvfb-run -a -s "-screen 0 1024x768x24" /usr/bin/wkhtmltopdf-origin  "\$@"
END

6

问题可能出在wkhtmltopdf的旧版本中 -分发存储库中的0.9版要求运行X服务器,但是当前版本-0.12.2.1不需要它-可以无头运行。

http://wkhtmltopdf.org/downloads.html下载用于分发的软件包并安装-对于Ubuntu:

sudo apt-get install xfonts-75dpi
sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb

6

wkhtmltopdf> 0.11没有这个X-server问题。
因此0.12.2.1,在Linux服务器上安装。

  1. 首先安装xvfb服务器:

    sudo apt-get install xvfb
    
  2. http://wkhtmltopdf.org/downloads.html获取所需的wkhtmltopdf版本

  3. 安装wkhtmltopdf:

    sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
    

    或安装 wget

    URL='http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb'; FILE=`mktemp`; wget "$URL" -qO $FILE && sudo dpkg -i $FILE; rm $FILE
    
  4. 安装依赖项(如果需要):

    sudo apt-get -f install
    
  5. 在中创建符号链接/usr/local/bin/

    echo 'exec xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"' | sudo tee /usr/local/bin/wkhtmltopdf.sh >/dev/null
    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  6. 现在尝试下面的方法,它应该可以工作,

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    

5

我只是想知道,我可以简单地将静态可执行文件移动到/usr/bin/目录并从任何位置执行它。



1

我确实按照这里的说明进行操作,并为我工作了wkhtmltopdf,但我想提供一些观点,我在与wkhtmltopdf- 一起做小舞时发现了这一观点xvfb

这很重要,因为导致它引发臭名昭著的cannot connect to X server错误的相同原因也导致它以严格的限制运行,即使您确实为其提供了X服务器也是如此。这些限制包括无法使用多个输入源,设置页眉和页脚等(请查看手册的“ 缩减功能”部分)。

wkhtmltox本身不需要X11,但是它利用了QT库。在wkthmltox的新版本中,开发人员为QT制作了一个补丁,使它可以与X11一起运行。

当前,有些版本是针对修补的QT构建的,而有些则不是。您可以通过运行来检查版本wkhtmltopds --version。最后应该有一行说Compiled against wkhtmltopdf patched qt.

因此,总而言之,如果您安装并使用使用修补程序库的版本,则可以在没有xvfb服务器的Linux服务器上工作,正如我可以确认的那样。


1

Centos7的解决方案

yum -y install xorg-x11-fonts-75dpi \
               xorg-x11-fonts-Type1 \
&& rpm -Uvh http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm

我们在docker容器中遇到了这个问题,并且上面的安装有带有补丁QT的wkhtmltopdf


2
对我来说URL无法正常工作,我使用了以下方法:sudo rpm -Uvh https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
WebOrCode

1

请注意:您的文件可能是wkhtmltopdf.shwkhtmltopdf,请在第二步进行检查

您必须将其复制到目录:/ usr / local / bin,使其成为可执行文件,并添加wkhtmltopdf.sh的符号链接,如下所示:

1-命令:

sudo apt-get install wkhtmltopdf

2-将二进制文件插入目录/ usr / bin中,以便浏览器无权在此目录中执行。您必须将wkhtmltopdf.sh复制 到目录/ usr / local / bin,因为浏览器对该目录具有权限,例如:

sudo cp /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf.sh

3-使二进制文件具有执行权限后,如:

sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh

4-现在可以测试了,它的工作方式如下:

/usr/local/bin/wkhtmltopdf.sh http://www.google.com google.pdf

它将pdf下载到您终端的当前目录中

5-现在可选,您可以在目录/ usr / local / bin中添加符号链接,例如

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf

0
  1. 从此链接下载文件
  2. 解压缩并将可执行文件(/ wkhtmltox / bin / wkhtmltopdf)移至 /usr/bin/
  3. 如果当前名称不是wkhtmltopdf,则将其重命名为wkhtmltopdf。这样,您现在可以在/usr/bin/wkhtmltopdf
  4. 设置权限:sudo chmod a + x / usr / bin / wkhtmltopdf
  5. 安装所需的支持包。须藤apt-get install openssl build-essential xorg libssl-dev
  6. 现在,使用wkhtmltopdf http://www.google.com test.pdf 提示进行检查:来自此链接的详细信息


0

如果在Centos中为Rails或Somethings配置wkhtmltopdf,则可以按照以下步骤操作:

  1. 转到https://wkhtmltopdf.org/downloads.html并复制rpm文件的链接。

在centos服务器bash中。

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=>您将获得wkhtmltopdf的路径。

  1. 使用步骤4中的路径设置wicked_pdf或pdfkit。这是wickedpdf的示例配置。config / initializers / wicked_pdf.rb

    if Rails.env != "production"
        path = %x[which wkhtmltopdf].gsub(/\n/, "")
    else
        path = "path_of_wkhtmltopdf_in_step_4"
    end
    WickedPdf.config = { exe_path: path }
    
  2. 重新启动服务器。

完成。


0

对于64位使用:

wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2

tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2

sudo mv wkhtmltopdf-amd64 /usr/bin/wkhtmltopdf

sudo chmod +x /usr/bin/wkhtmltopdf


0

只是告诉Qt后端不要使用X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.