【问题标题】:KnpSnappyBundle - stderr: "wkhtmltopdf: cannot connect to X server " stdout: ""KnpSnappyBundle - 标准错误:“wkhtmltopdf:无法连接到 X 服务器”标准输出:“”
【发布时间】:2014-04-29 19:10:57
【问题描述】:

我正在尝试使用 KnpSnappyBundle 从树枝模板创建 PDF 文件。

我已经按照这个post 安装wkhtmltopdf 并且当我这样做时它可以工作:

wkhtmltopdf http://www.google.com test.pdf

但是当我尝试从控制器创建 PDF 文件时:

$this->get('knp_snappy.pdf')->generateFromHtml(
$this->renderView('AcmePDFBundle:Default:template.html.twig'),
'../app/var/PDFfiles/PDF.pdf'
); 

我收到此错误:

request.CRITICAL: RuntimeException: The exit status code '1' says something went wrong:
stderr: "wkhtmltopdf: cannot connect to X server
"
stdout: ""
command: /usr/bin/wkhtmltopdf --lowquality '/tmp/knp_snappy532ca2272fba44.73835084.html' '../app/var/files/PDF.pdf'. (uncaught exception) at /home/me/MyServer/project/vendor/knplabs/knp-snappy/src/Knp/Snappy/AbstractGenerator.php line 304 [] []

知道怎么解决吗?

这是我对 KnpSnappyBundle 的配置:

knp_snappy:
    pdf:
        enabled:    true
        binary:     /usr/bin/wkhtmltopdf
        options:    []
    image:
        enabled:    false
        binary:     /usr/bin/wkhtmltoimage
        options:    []

【问题讨论】:

    标签: symfony pdf-generation wkhtmltopdf


    【解决方案1】:

    已解决安装预编译版本的问题。现在您可以从这里获取您的版本(灵感来自this out of date answer):

    http://wkhtmltopdf.org/downloads.html

    并将我的config.yml 更改为:

    knp_snappy:
        pdf:
            enabled:    true
            binary:     /usr/local/bin/wkhtmltopdf
            options:    []
        image:
            enabled:    false
            binary:     /usr/local/bin/wkhtmltoimage
            options:    []
    

    现在它可以工作了!

    【讨论】:

    • 上面和下面的安装和使用方法有什么区别?
    • @guy_fawkes - 由于http://code.google.com/p/wkhtmltopdf/downloads/list 链接不再存在,我刚刚使用apt-get install wkhtmltopdf 命令安装了wkhtmltopdf。这就是它不起作用的原因。
    • 项目 URL 已更改。 wget 命令应在以下地址downloads.sourceforge.net/project/wkhtmltopdf/0.12.0/… 中完成,并使用 - tar -xJf wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz 对下载的文件进行解压缩
    • 官方预编译版本返回wkhtmltopdf 0.12.5 (with patched qt)而不是wkhtmltopdf 0.12.4作为它们的版本字符串(调用wkhtmltopdf -V)。这些补丁可以在没有(假的)X 服务器的情况下工作。如果你不能使用这些二进制文件,你可以尝试使用 xvfb 或 xvfb-run 来包装 wkhtmltopdf-calls,如果它安装在你的托管环境中(就像它在我的主机上一样)。
    【解决方案2】:

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

    6 - 复制到 /usr/bin/wkhtmltoimage/usr/local/bin/wkhtmltoimage 比如:

    sudo cp usr/local/wkhtmltoimage usr/local/bin/wkhtmltoimage

    8- make sur 这也是可执行的:

    sudo chmod a+x /usr/local/bin/wkhtmltoimage

    7 - 在 config/packages/knp_snappy.yaml 中更改 symfony 配置中的二进制目录:

    knp_snappy:
        pdf:
            enabled:    true
            binary:     /usr/local/bin/wkhtmltopdf
            options:    []
        image:
            enabled:    false
            binary:     /usr/local/bin/wkhtmltoimage
            options:    []

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多