起因
我们会将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里的文件。报错消失。
中间其实曲折很多,但是最终还是解决了。
以前的同事我问了,也遇到了这个问题。解决方式是手动把报错的代码注释掉了,也是一种解决思路。