wkhtmltopdf:无法连接到X服务器

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

./wkhtmltopdf file1.html file2.pdf 

不过,我想在整个系统上安装这个程序。 我使用了apt-get install wkhtmltopdf (昨天刚刚安装),由于我在64位系统上运行,我还需要apt-get install ia32-libs 。 安装后我可以find这样的版本:

 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 

有谁知道我可以解决这个问题? 我猜这个版本是缺less一个虚拟的X服务器或东西。

或者试试这个(来自http://drupal.org/node/870058

  1. 下载wkhtmltopdf。 或者更好地使用包pipe理器来安装它:

     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. 我们需要编写一个小脚本文件来包装wvxbb。 创build一个名为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 

这解决了我的问题:

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

我试图做sudo apt-get install wkhtmltopdf但没有任何成功。 相反,我build议你尝试:

  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

刚刚做到了:

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

有用!

我find了解决这个问题的方法,而没有假的X服务器。 在最新版本的wkhtmltopdf不需要X服务器的工作,但它没有进入官方的Linux库。

解决schemeUbuntu 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(trusty)amd64的解决scheme

 $ 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得到了很好的解决scheme,但与utilite仓库已经改变。

拓展蒂莫西的回答

如果你是一个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库。 下面是创buildPDF的简单例子:

 <?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>'); 

从SourceForge更新到最新的wkhtmltopdf版本(截止撰写本文时为0.12)。 它不需要运行X服务器。

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 << 
 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 

问题可能是wkhtmltopdf的旧版本 – 从发行版本库0.9版本需要运行X服务器,但目前的版本 – 0.12.2.1不需要它 – 可以运行无头。

http://wkhtmltopdf.org/downloads.html下载你的发行包并安装&#x5B83; – 对于Ubuntu:

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

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

为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 

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

  1. 首先安装xvfb服务器:

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

  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/创build符号链接

     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 

build议使用至less0.12.2.1。

从wkhtmltopdf> = 0.12.2开始,它不再需要X服务器或仿真。 您可以从http://wkhtmltopdf.org/downloads.html下载新版&#x672C;

我确实按照这里的指示,使wkhtmltopdf为我工作,但我想提供一些观点,当我用wkhtmltopdfxvfb做自己的小舞时,我发现了。

这很重要,因为导致它抛出臭名昭着的cannot connect to X server错误的同样的原因也导致它与服务器限制运行,即使你提供了一个X服务器。 这些限制包括无法获取多个input源,设置页眉和页脚等(请查阅手册中的缩减function部分 )。

wkhtmltox本身并不需要X11,但是它使用的是QT库。 在wkthmltox的新版本中,开发者为QT提供了一个补丁,允许它使用X11运行。

目前有些版本是针对补丁QT构build的,有些则不是。 你可以通过运行wkhtmltopds --version来检查你的版本。 最后应该有一句话说, Compiled against wkhtmltopdf patched qt.

所以,总结一下,如果你安装并使用了一个使用补丁库的版本,它应该可以在没有xvfb服务器的linux服务器上工作,我可以确认。

解决schemeCentos7

 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

敌人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

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

只需安装0.12.4或更高版本。 这似乎解决了这个问题。

请参阅如何在Ubuntu 16.04上安装最新的wkhtmltopdf? 。