11

这是一个奇怪的小问题,导致我在 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 以确保它从本地文件加载的选项?我很困惑。谢谢!

4

3 回答 3

3

使用绝对文件路径时我取得了成功(请注意 之后的额外斜杠file://

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

这在windows上是一样的

Unix 路径

file:///absolute/path/to/file

窗口路径

file:///C:/absolute/path/to/file
于 2014-07-17T13:07:39.037 回答
1

在上一个 0.11 whicked-pdf 中,我发现了一个错误
示例 C:\Ruby193\lib\ruby\gems\1.9.1\gems\wicked_pdf-0.11.0\lib>wicked_pdf.rb 第 198 行我更改为:
options[hf][ :html][:url] = "file://#{tf.path}" 到 options[hf][:html][:url] = "file:///#{tf.path}" - (更改// 到 ///)
更改 whicked-pdf 后再次起作用。

于 2014-12-07T16:12:59.670 回答
0

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

我在产品中使用它,效果很好。无需直接调用 wkhtmltopdf。

于 2013-01-21T02:25:38.157 回答