wkhtmltopdf:无法连接到X服务器

时间:2012-03-07 15:48:14

标签: wkhtmltopdf xserver

我一直在使用wkthmltopdf在我的linux网络服务器上即时将html转换为pdf文档。该程序最初需要X11或类似的X服务器才能正常运行,但是由于开发人员要求在没有GUI的服务器上运行该程序,我很确定它在static version中运行虚拟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服务器或其他东西。

20 个答案:

答案 0 :(得分:197)

或尝试此操作(来自http://drupal.org/node/870058

  1. Download wkhtmltopdf.或者最好使用软件包管理器安装它:

    sudo apt-get install wkhtmltopdf
    
  2. 将其解压缩并移至/usr/local/bin/

  3. 将其重命名为wkhtmltopdf,以便现在您在/usr/local/bin/wkhtmltopdf
  4. 处拥有可执行文件
  5. 设置权限:sudo chmod a+x /usr/local/bin/wkhtmltopdf
  6. 安装所需的支持包。

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

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

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

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

    sudo apt-get install xvfb
    
  9. 我们需要编写一个小的shell脚本来将wkhtmltopdf包装在xvfb中。创建一个名为wkhtmltopdf.sh的文件并添加以下内容:

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

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

    /usr/local/bin/wkhtmltopdf.sh http://www.google.com test.pdf
    
  12. 请注意,http://www.google.com可能会抛出错误,例如“已完成的ResourceObject收到加载完成的信号。这可能表示iframe需要很长时间才能加载。”您可能希望使用更简单的页面进行测试,例如http://www.example.com

答案 1 :(得分:60)

这解决了我的问题:

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

答案 2 :(得分: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 it to executable:

    chmod a+x wkhtmltopdf

  5. 将其放入/ usr / bin:

    sudo mv wkhtmltopdf /usr/bin

答案 3 :(得分:25)

刚刚成功:

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

工作正常

有效!

答案 4 :(得分: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的存储库已更改。

答案 5 :(得分:11)

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

答案 6 :(得分:11)

扩大蒂莫西的答案......

如果您是一名希望将wkhtmltopdf用作网络应用程序一部分的网络开发人员,您只需将其安装到/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>');

答案 7 :(得分:8)

for 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

答案 8 :(得分: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

答案 9 :(得分:5)

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

答案 10 :(得分:5)

wkhtmltopdf&gt; 0.11没有X-server问题。
所以在linux服务器上安装0.12.2.1

  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
    

答案 11 :(得分:3)

建议至少使用0.12.2.1。

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

下载新版本

答案 12 :(得分:1)

我确实遵循了这里的说明并让wkhtmltopdf为我工作,但我想提供一些我在wkhtmltopdf - xvfb做自己的小舞时发现的视角。

这很重要,因为导致它抛出臭名昭着的cannot connect to X server错误的相同原因也导致它运行时具有服务器限制,即使你确实提供了X服务器。这些限制包括无法获取多个输入源,设置页眉和页脚等(请查看Reduced Functionality section of the manual)。

wkhtmltox本身不需要X11,但它正在使用QT库。在wwethmltox的newever版本中,开发人员为QT制作了一个补丁,允许它与X11一起运行。

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

因此,总而言之,如果您安装并使用使用修补库的版本,它应该在没有xvfb服务器的Linux服务器上运行,我可以确认。

答案 13 :(得分: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容器内遇到此问题,上面的安装有 wkhtmltopdf ,修补了QT

答案 14 :(得分:0)

Foe 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

答案 15 :(得分:0)

  1. this link
  2. 下载文件
  3. 将其解压缩并将可执行文件(/ wkhtmltox / bin / wkhtmltopdf)移至/usr/bin/
  4. 如果当前名称不是wkhtmltopdf,则将其重命名为wkhtmltopdf。现在,您已在/usr/bin/wkhtmltopdf
  5. 处拥有可执行文件
  6. 设置权限:sudo chmod a + x / usr / bin / wkhtmltopdf
  7. 安装所需的支持包。 sudo apt-get install openssl build-essential xorg libssl-dev
  8. 现在,查看wkhtmltopdf http://www.google.com test.pdf 提示:detail information from this link

答案 16 :(得分:0)

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

请参阅How can I install the latest wkhtmltopdf on Ubuntu 16.04?

答案 17 :(得分:0)

您必须将其复制到目录: / 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

答案 18 :(得分: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. 重新启动服务器。

完成。

答案 19 :(得分:0)

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

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>