【问题标题】:wicked_pdf too much images = broken PDFwicked_pdf 太多图像 = 损坏的 PDF
【发布时间】:2012-11-07 07:34:07
【问题描述】:

wicked_pdf(或 wkhtmltopdf)在生产模式下的行为很奇怪。花了一些时间来解决问题,但似乎我的 PDF 损坏的原因是图像太多或文件太大。

当我尝试使用 300dpi 的图片 (4 MB) 时,它坏了。当我降低到 72 dpi 时,它会起作用……有时。当我只使用缩略图时,它总是有效的。

我做了一个测试:一张带有小测试图像的封面可以工作。还有两张封面,……最多可以工作 30 张。当我附上封面 31 时,我的 pdf 总是损坏。

在开发中一切都很好,300dpi 图像、5 MB、50 MB 没问题。

有人知道这个问题吗?以及如何解决? :-)

PS:当我通过命令行执行 wkhtmltopdf 时,它根本不显示任何图像,因此很难测试 wkhtmltopdf 或 wicked_pdf 是否是问题所在。我真的不喜欢生成 PDF!

【问题讨论】:

    标签: ruby-on-rails pdf-generation wkhtmltopdf wicked-pdf


    【解决方案1】:

    wkthmltopdf 尽最大努力收集并呈现 pdf 中的所有资源,就像为其提供支持的 webkit 浏览器一样。如果无法及时检索和渲染它们,有时会输出未完成的 pdf。

    我们可以检查或做一些事情来优化这个过程。

    确保您的所有资产(图像、javascript、css)都使用完整路径(如“http://images/foo.jpg”)正确呈现,而不是相对路径(如“/foo.jpg”)。

    这会导致 wkhtmltopdf 通过网络访问这些资源,有时这还不够快,因此如果可以,请尝试使用文件系统资源链接,例如 'file:///projects/foo/images/ foo.jpg'。 wicked_pdf_image 和其他相关帮助程序会尝试为您执行此操作,但根据您使用的 Rails 版本,结果可能会有所不同。

    Wkhtmltopdf 使用大量内存和 cpu(尤其是大图像),请确保您的生产服务器没有被它饿死。

    wicked_pdf 的 git master 版本进行了优化,可以使用临时文件而不是 I/O 流。将您的 Gemfile 指向该 git://github.com/mileszs/wicked_pdf.git,看看这是否对您有所帮助。未来几天可能会发布新版本的 gem(我为 wicked_pdf 做了很多维护和发布管理)。

    请回来报告。我很想知道上述任何一项或所有措施是否能改善这种情况。

    【讨论】:

    • 我已经使用了 wicked_pdf_image-helper,它会输出 file://-links——但这根本没有区别。服务器在生成 pdf 时很好。主版本没有帮助。我发现问题与 wicked_pdf-gem 有关,当我通过命令行使用 wkhtmltopdf 并使用相同的选项时,它可以工作!
    • 我现在使用 system(wkhtmltopdf ...) 并且它按预期工作,即使有多个大图像。但是,wicked_pdf 的解决方案会很棒。
    • @ArneCordes 如果可以的话,我真的会对更多细节感兴趣。你能发布你调用渲染的选项和你传递给命令行 wkhtmltopdf 的标志吗?
    • 我终于发现我的 PDF 生成工作正常……从一开始。问题在于将生成的文件发送到客户端。在尝试自己完成并通过命令行 - system(wkhtml ...) - 并使用 send_file() 生成 PDF 后,我得到了与使用 wicked_pdf 相同的结果 - 一个损坏的文件。这似乎与nginx有关,但是嘿,一个新问题总比同一个问题好;-)谢谢你的回复!我还是喜欢 wkhtmltopdf 和 wicked_pdf。
    • @ArneCordes 感谢您的跟进!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 2012-04-13
    相关资源
    最近更新 更多