【问题标题】:Creating pdf and sending it via email创建pdf并通过电子邮件发送
【发布时间】:2014-11-06 21:48:53
【问题描述】:

我正在开发一个电话计费应用程序。 我创建了带有 3 个表 Client、Invoice、CallRecord 的简单 Rails 应用程序。 我可以浏览我的虚拟数据并且一切正常。 我想添加一个通过电子邮件向客户发送发票的功能。 我正在考虑在 invoice#show 视图上创建一个简单的链接/按钮:发送发票。

我正在查看 WickedPDF gem,因为它会从 HTML 生成 pdf。

我有三个问题:

1) WickedPDF 是否适合我正在寻找的内容? 我不是想向浏览网站的用户提供 PDF。我不想让它可下载。 如果尚未生成,我只需要在单击发送发票时生成并保存它。然后使用 rails mailer 将其通过电子邮件发送给客户端,将生成的副本保存在服务器上(所有这些都将在自定义控制器操作中完成)。

2) 存储生成的 pdf 的最佳位置在哪里?资产文件夹,公用文件夹中的自定义文件夹?

3) 你会如何使用 Rails 保存文件?我做了一些rails,但我从来没有在这个方向上做过任何事情。

【问题讨论】:

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


    【解决方案1】:
    1. 您实际上可以直接使用Wicked-PDF 而无需 控制器:

      pdf = WickedPdf.new.pdf_from_string('<h1>Hello There!</h1>')

    WickedPdf.new.pdf_from_string(
      render_to_string('templates/pdf.html.erb', :layout => 'pdfs/layout_pdf'),
      :footer => {
        :content => render_to_string(:layout => 'pdfs/layout_pdf')
      }
    ) # which is awesome
    
    1. 它们应该以类似的格式存储在公共文件夹中:

      public/users/:user_id/:invoice_id

    2. 您应该考虑使用sidekiq 或其他方式将其作为延迟作业,因为生成需要时间,用户不应等到生成。

    【讨论】:

    • khaled-gomaa - 您如何将生成的 pdf 保存到磁盘上?假设我将按照您的建议在控制器中生成它 pdf = WickedPdf.new.pdf_from_string(..) File.open(...) {...} 是要走的路吗?我知道您建议使用 sidekiq 生成 pdf。如果控制器立即退出,我将如何保存它。我的sidekiq知识有限。这可能是另一个问题,但如果您可以使用此信息更新您的答案,我将不胜感激。
    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 2018-09-19
    • 2011-04-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2015-06-21
    相关资源
    最近更新 更多