美文网首页
记录php使用html转换pdf时踩的坑

记录php使用html转换pdf时踩的坑

作者: 怀老师 | 来源:发表于2022-11-08 17:52 被阅读0次

    起因

    我们会将html文件转换为pdf文件来方便打印。

    使用环境

    环境依赖

    windows、docker、centOS8镜像、php7

    compose扩展:

    1:twig来进行html模板渲染
    2:knp-snappy进行pdf转换(以下简称knp)
    3:wkhtmltopdf-amd64做实际的命令执行(类似ImageMagick的convert命令)

    问题

    在本地调用转换命令时报错。

    Exit with code 1 due to network error: ContentNotFoundError
    The process has been signaled with signal 11

    排查过程

    1:首先找到报错的位置,是wkhtmltopdf-amd64命令在执行时抛出的报错。根据报错猜测是有文件没有找到或者不可读。
    2:将渲染html的/tmp目录给777权限。还是报错。
    3:找到wkhtmltopdf-amd64的官方仓库,看issues找到类似的报错,看到有人说是html的路径没有写全。
    4:打开渲染后的html文件(这里要注意,knp渲染完后会hook析构方法__destruct(),将临时文件删除掉,所以要sleep(30),再将文件复制出来),找到有使用src连接的地方,发现确实有个地方没有写死路径,用了相对路径,改成绝对路径测试。报错变了。
    5:拿到第二个报错,直奔knp的issues,发现已经项目已经停止维护了。不过找到了wkhtmltopdf-amd64的仓库地址,发下作者有更新。
    6:在git上下载wkhtmltopdf-amd64 for centOS8的rpm包,然后把编译后的二进制文件替换vendor里的文件。报错消失。

    中间其实曲折很多,但是最终还是解决了。

    以前的同事我问了,也遇到了这个问题。解决方式是手动把报错的代码注释掉了,也是一种解决思路。

    相关文章

      网友评论

          本文标题:记录php使用html转换pdf时踩的坑

          本文链接:https://www.haomeiwen.com/subject/wfpntdtx.html