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 服务器什么的。

4

21 回答 21

208

或试试这个(来自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.

于 2012-03-13T13:36:59.923 回答
61

This solved the issue for me:

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf
于 2012-11-28T12:12:59.553 回答
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 a+x wkhtmltopdf

  5. 将其放入 /usr/bin :

    sudo mv wkhtmltopdf /usr/bin

于 2013-03-07T05:30:49.753 回答
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

它工作正常

有用!

于 2014-11-14T12:28:24.580 回答
16

我找到了在没有假 X 服务器的情况下解决这个问题的方法。在最新版本的 wkhtmltopdf 中不需要 X 服务器来工作,但它不会进入官方 linux 存储库。

Ubuntu 14.04.4 LTS (trusty) 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 的解决方案

$ 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 的存储库已经改变。

于 2016-01-22T13:08:13.243 回答
11

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

如果您是一位希望将 wkhtmltopdf 用作您的 Web 应用程序的一部分的 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>');
于 2013-05-21T19:16:03.193 回答
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
<<
于 2014-10-16T08:58:06.710 回答
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
于 2017-04-21T21:25:38.873 回答
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
于 2014-05-02T18:35:21.043 回答
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
    
于 2016-05-12T08:12:23.097 回答
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
于 2015-09-13T15:10:53.257 回答
5

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

于 2012-03-07T16:47:17.790 回答
3

It is recommended to use at least 0.12.2.1.

Starting from wkhtmltopdf >= 0.12.2 it doesn't require X server or emulation anymore. You can download new version from http://wkhtmltopdf.org/downloads.html

于 2017-01-12T11:23:27.480 回答
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 服务器上运行,我可以确认。

于 2014-04-15T15:42:28.500 回答
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

于 2015-08-28T18:01:15.620 回答
1

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

您必须将其复制到目录:/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 - 在使 sur 二进制文件具有执行权限后,例如:

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
于 2019-04-18T20:39:34.210 回答
1

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

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
于 2020-06-24T07:52:09.410 回答
0
  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 提示:来自此链接的详细信息
于 2017-04-12T12:13:30.210 回答
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

于 2016-06-25T11:09:31.590 回答
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 的示例配置。配置/初始化程序/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. 重启服务器。

完毕。

于 2019-11-13T15:57:33.920 回答
0

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

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

于 2017-09-25T08:17:37.097 回答