这是一个奇怪的小问题,导致我在 SO 上发布了我的第一个问题。我正在使用 wkhtmltopdf 将 HTML 文档转换为 PDF 作为 Rails 应用程序的一部分。为此,我将 Rails 网页呈现为临时目录中的静态 HTML 文件,将静态页眉、页脚和图像复制到同一临时目录,然后使用“系统”执行 wkhtmltopdf。
这在开发和测试环境中完美运行。在我的暂存环境中,它没有。起初我怀疑权限,但该过程的前几个部分(创建 HTML 静态文件并将它们复制到目录)正在工作。我可以从该临时目录中的命令行运行 wkhtmltopdf 并获得预期的结果。最后,我在暂存环境中通过 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 以确保它从本地文件加载的选项?我很困惑。谢谢!