wkhtmltopdf:无法连接到X服务器

jef*_*ind 111 xserver wkhtmltopdf

我一直在使用wkthmltopdf在我的linux web服务器上即时将html转换为pdf文档.该程序最初需要X11或类似的X服务器才能正常运行,但是由于开发人员要求在没有GUI的服务器上运行该程序,我很确定它在静态版本中运行虚拟X服务器.我一直在使用程序的静态(独立)版本,它工作得很好!我将可执行文件放在一个文件夹中,然后运行:

./wkhtmltopdf file1.html file2.pdf
Run Code Online (Sandbox Code Playgroud)

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

wkhtmltopdf --version
Run Code Online (Sandbox Code Playgroud)

输出:

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.
Run Code Online (Sandbox Code Playgroud)

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

wkhtmltopdf: cannot connect to X server
Run Code Online (Sandbox Code Playgroud)

有谁知道我怎么解决这个问题?我想这个版本缺少虚拟X服务器或其他东西.

Tim*_*olo 201

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

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

    sudo apt-get install wkhtmltopdf
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  6. 检查它是否有效:运行

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    
    Run Code Online (Sandbox Code Playgroud)

    如果它有效,那么你就完成了.如果收到错误"无法连接到X服务器",则继续编号7.

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

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

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
    Run Code Online (Sandbox Code Playgroud)
  9. 将此shell脚本移动到/usr/local/bin,并设置权限:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
    Run Code Online (Sandbox Code Playgroud)
  10. 检查它是否再次起作用:运行

    /usr/local/bin/wkhtmltopdf.sh http://www.google.com test.pdf
    
    Run Code Online (Sandbox Code Playgroud)

请注意,http://www.google.com可能会抛出错误,例如"已完成的ResourceObject收到加载完成的信号.这可能表示iframe需要很长时间才能加载." 您可能想要使用更简单的页面进行测试http://www.example.com.


小智 60

这解决了我的问题:

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf
Run Code Online (Sandbox Code Playgroud)

  • 在基于 Redhat 的发行版上,使用 `sudo yum install xorg-x11-server-Xvfb` 响应。`sudo dnf 安装 xorg-x11-server-Xvfb`。 (2认同)

Yak*_*idi 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


Sfb*_*auw 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

它的工作正常

有用!

  • 我同意.这个解决方案让我达到目前的转速.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` (2认同)

PRI*_*LOP 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

用户felixhummel得到了非常好的解决方案,但是与utilite的存储库已经改变了.


Jon*_*han 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
Run Code Online (Sandbox Code Playgroud)

你现在可以在任何地方运行它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>');
Run Code Online (Sandbox Code Playgroud)


fel*_*mel 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
<<
Run Code Online (Sandbox Code Playgroud)


Mat*_*ias 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
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)


Hon*_*nza 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
Run Code Online (Sandbox Code Playgroud)


Par*_*us- 6

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

  1. 首先安装xvfb服务器:

    sudo apt-get install xvfb
    
    Run Code Online (Sandbox Code Playgroud)
  2. http://wkhtmltopdf.org/downloads.html获取所需版本的wkhtmltopdf

  3. 安装wkhtmltopdf:

    sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
    
    Run Code Online (Sandbox Code Playgroud)

    或安装 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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 安装依赖项(如果需要):

    sudo apt-get -f install
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  6. 现在尝试下面它应该工作,

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    
    Run Code Online (Sandbox Code Playgroud)


jef*_*ind 5

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