首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

PHP 使用 wkhtmltopdf 的问题

  •  
  •   kkshell · 39 天前 · 1846 次点击
    这是一个创建于 39 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题麻烦跳转看下 https://segmentfault.com/q/1010000020318067

    搞了一早上没得头绪,求支招

    第 1 条附言  ·  39 天前
    wkhtmltopdf 0.12.1
    第 2 条附言  ·  39 天前
    问题已经解决,这个文档里面有提到一个问题,我尝试升级一下 wkhtmltopdf,然后就可以咯- -

    https://github.com/KnpLabs/snappy/blob/master/doc/faq.md

    Q: It says wkhtmltopdf: cannot connect to X server or xvfb-run: error: Xvfb failed to start.
    A: Please, check your wkhtmltopdf version. It is recommended to use at least 0.12.2.1 and what is important - 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 or install via composer for Linux servers as stated in README. If there is no possibility to update wkhtmltopdf, please check http://stackoverflow.com/questions/9604625/wkhtmltopdf-cannot-connect-to-x-server
    19 回复  |  直到 2019-09-08 23:46:48 +08:00
        1
    kkshell   39 天前
    youyou 会的大佬不
        2
    AlloVince   39 天前
    和 php 无关,wkhtmltopdf 需要启动图形界面,你可以借助 xvfb 封装一个无界面的命令行

    具体可以参考我以前写过的一个 wkhtmltopdf 微服务 dockerfile

        3
    kkshell   39 天前
    @AlloVince 好的谢谢,我参考一下
        4
    manhere   39 天前
    可以 composer require "knplabs/knp-snappy"
        5
    kkshell   39 天前
    @manhere 有什么作用
        6
    manhere   39 天前
    @kkshell https://github.com/KnpLabs/snappy 一直使用,没有问题
        7
    gamesme   39 天前 via iPhone
    虽然我是个小白 但是有看过一个 laravel 项目使用 wkhtmltopdf 项目叫 Bookstackapp 里面也是用楼上提到的 knpsnappy 包来调用 wkhtmltopdf
    具体代码我就看不懂了 不知道能不能帮到你
        8
    gamesme   39 天前 via iPhone
    好像不是用 exec 是用 proc_open 执行
        9
    kkshell   39 天前
    @manhere
    $snappy = new Pdf('/usr/bin/wkhtmltopdf');
    $snappy->generateFromHtml($content, '/tmp/bill-123.pdf');

    问题依旧如下:The exit status code '1' says something went wrong:
    stderr: "wkhtmltopdf: cannot connect to X server
    "
    stdout: ""
    command: /usr/bin/wkhtmltopdf --lowquality '/tmp/knp_snappy5d735f969db923.75691036.html' '/tmp/bill-123.pdf'.
        10
    kkshell   39 天前
    @gamesme 嗯,但是还是有这个问题 wkhtmltopdf: cannot connect to X server
        11
    kkshell   39 天前
    @AlloVince 网站无法访问
        12
    sleepm   39 天前 via Android
    你把它整复杂了
    exec 直接调用 wkhtmltopdf 完了,要啥 xserver
        13
    kkshell   39 天前
    @sleepm 直接调用就是报这个错 string(41) "wkhtmltopdf: cannot connect to X server"
        14
    gamesme   39 天前
    目前为止我觉得二楼的回答是最靠谱的
    For CentOS PHP environment the WkHTMLtoPDF tool not need xvfb-run to exec the command, But for Ubuntu PHP environment need xvfb-run to exec the command! I had revised my code as below and the issues was resolved

    这是楼主您在 segmentfault 贴的解决办法链接,错误出现的原因应该是 Ubuntu 需要图形界面来运行 wkhtmltopdf
        15
    wangyongbo   39 天前   ♥ 1
    你可以尝试升级到这个版本。wkhtmltopdf 0.12.4 (with patched qt)

    我在 python 里面用的这个版本。 运行正常。
        16
    zjsxwc   39 天前
    基于 Qt Webkit 的工具你想不依赖 x server 就能运行?
        17
    183shl   38 天前 via Android
    借帖子问一下,我用 python 写了一个 markdown 转 pdf,表格渲染不出来怎么解决呢
        18
    linxiaojialin   38 天前
    Laravel:

    # config/snappy.php
    return [
    'pdf' => array(
    'enabled' => true,
    'binary' => '/usr/local/bin/wkhtmltopdf',
    'timeout' => false,
    'options' => [],
    'env' => [],
    ),
    'image' => array(
    'enabled' => true,
    'binary' => '/usr/local/bin/wkhtmltoimage',
    'timeout' => false,
    'options' => [],
    'env' => [],
    ),
    ];

    # [email protected]:
    $snappy = resolve('snappy.image.wrapper');
    return $snappy->getOutput($url);
        19
    MeteorCat   37 天前 via Android
    这个玩意需要 x 桌面环境,也就是图形化处理;这个没办法,我记得蚂蚁笔记服务器部署也有这个,一安装这个划拉一堆 X 桌面环境
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2603 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 14:26 · PVG 22:26 · LAX 07:26 · JFK 10:26
    ♥ Do have faith in what you're doing.