ruby-on-rails – wkhtmltopdf尝试从http而不是文件加载

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – wkhtmltopdf尝试从http而不是文件加载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是一个奇怪的小问题,导致我在SO上发布我的第一个问题.我使用wkhtmltopdf将 HTML文档转换为PDF作为Rails应用程序的一部分.为此,我将Rails网页呈现为临时目录中的静态HTML文件,将静态页眉,页脚和图像复制到同一个临时目录,然后使用“system”执行wkhtmltopdf.

这在开发和测试环境中非常有效.在我的Staging环境中,它没有.我首先怀疑权限,但该进程的前几部分(创建HTML静态文件并将它们复制到目录中)正在运行.我可以从该临时目录中的命令行运行wkhtmltopdf并获得预期的结果.最后,我通过“系统”和反引号在staging环境中通过Rails控制台运行wkhtmltopdf,这是我得到的输出

> `wkhtmltopdf --footer-html tmp/invoices/footer.html --header-html tmp/invoices/header.html -s Letter -L 0in -R 0in -T 0.5in -B 1in tmp/invoices/test.html tmp/invoices/this.pdf`
Loading pages (1/6)
QPainter::begin(): Returned false                            ] 10% 
Error: Unable to write to destination                             
Error: Failed loading page http://tmp/invoices/test.html (sometimes it will work just to ignore this error with --load-error-handling ignore) => ""

注意最后一位.我指向本地文件,但它正在通过http查找它们.好吧,我想,也许我需要明确并将其提供给file://协议,因此它不会寻找http.所以我试试这个:

> system("wkhtmltopdf --footer-html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/footer.html --header-html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/header.html -s Letter -L 0in -R 0in -T 0.5in -B 1in file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/test.html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/this.pdf")
Loading pages (1/6)
Error: Failed loading page file://library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/test.html (sometimes it will work just to ignore this error with --load-error-handling ignore)
=> false

请注意,这个在库中以小写“l”失败.有没有搞错? (并且不会,建议忽略该开关的错误,它没有任何改善.)

有任何想法吗?是否有Rails或Ruby设置会导致系统命令被重写?有没有我可以添加到wkhtmltopdf的选项,以确保它从本地文件加载?我很困惑.谢谢!

解决方法

看看wicked_pdf gem.
您可以添加PDF mime类型,然后添加您想要pdf的任何页面,只需将.pdf添加到URL即可.

我在生产中使用它,它运作良好.无需直接调用wkhtmltopdf.

原文链接:https://www.f2er.com/ruby/269580.html

猜你在找的Ruby相关文章