使用 Ruby/Rails 中的变量从 HTML 生成 PDF
我们正在重构我们的应用程序中的 PDF 生成器,并正在寻找我们现在使用的破解版的替代方案。经过一番研究,似乎 Prawn 或 PDFKit 是最佳选择。
理想情况下,我们希望进行 HTML 到 PDF 的转换,但还包括一些通过 Ruby 填写的字段,例如
<h1>#{user.name}</h1>
,当生成 PDF 时,该字段将替换为用户名。关于使用什么的任何建议/如何执行此操作的示例?
谢谢。
We are refactoring our PDF generator in our app and are looking at alternatives to the hacked up one we use now. After some research, it seems Prawn or PDFKit is the way to go.
Ideally, we would like to have a HTML to PDF conversion but also include some fields that get filled out through Ruby, say
<h1>#{user.name}</h1>
So when the PDF is generated, that is replaced with the user's name. Any suggestions on what to use/examples on how to do this?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你看过 Prince 的 PDF 生成工具吗?我最近浏览了所有的 Prawn 和 PDFKits 之类的东西,发现它们太......古怪......无法使用。
Prince 直接采用 HTML 并输出 PDF。使用 Rails 非常简单 - 您只需创建一个模板并通过 Rails 模板系统运行它,然后将其输出到文件(或直接到 Prince 的管道)而不是输出到屏幕。
例如,请参阅 Rails 中的
render_to_string
。您可以使用它将渲染的数据保存到文件中并将其提供给 Prince(或您选择使用的任何其他 PDF 生成器)。王子:
http://www.princexml.com/
Have you looked at Prince for PDF generation? I recently went through all the Prawn and PDFKits and whatnot, and found them just too..quirky..to use.
Prince takes straight HTML and outputs PDF. Very simple to use with Rails - you just make a template and run it through the Rails template system and spit it out to a file (or a pipe directly to Prince) instead of to the screen.
For example see
render_to_string
in Rails. You can use that to save the rendered data into a file and feed it to Prince (or any other PDF generator you choose use).Prince:
http://www.princexml.com/
查看 wkhtmltopdf (GitHub) - 它使用 webkit 进行渲染,因此您往往会得到相当好的结果。它有一些怪癖(例如,当使用连字渲染字体时,Adobe Reader 中会出现奇怪的字符),因此在决定在生产中使用它之前,请针对您的用例对其进行测试。
当然,您可以像生成任何网页一样使用您选择的模板语言生成 HTML。
Have a look at wkhtmltopdf (GitHub) -- it uses webkit to render so you tend to get fairly good results. It has some quirks (odd characters appearing in Adobe Reader when typefaces are rendered with ligatures for example), so test it for your use-cases before you decide to use it in production.
Of course, you would generate the HTMLs using the template language of your choice as you would any web-page.