将带有Wicked_pdf的PDF视图转换为文件并将其保存到S3

时间:2017-11-07 22:31:57

标签: ruby-on-rails paperclip ruby-on-rails-5 wicked-pdf

我目前有一个带有特定控制器方法的模型,可以呈现PDF视图。

假设这个模型是dataBound我在photographer_quote控制器中有一个名为print_quote的方法来完成这项工作。

以下是代码:

photographer_quote

一切都很好,当一个针对这个控制器方法的链接被操作时,它会动态创建PDF并在浏览器中呈现它。 (当然我有一个包含所有格式的视图......)

尽管如此,现在我想将此PDF创建放入队列(Sidekiq)并将其作为PDF文件保存到另一个模型中(我们称之为 @quote= Photographer_quote.find(params[:id]) respond_to do |format| format.pdf do render pdf: 'quote'+@quote.id.to_s end ),该模型具有单个PDF Paperclip附件。

虽然我很难通过Paperclip将PDF保存在S3上。

邪恶的pdf提及:

PDF_quotes

我是否必须先在本地创建文件?如何使用名为# or from your controller, using views & templates and all wicked_pdf options as normal pdf = render_to_string pdf: "some_file_name", template: "templates/pdf", encoding: "UTF-8" # then save to a file save_path = Rails.root.join('pdfs','filename.pdf') File.open(save_path, 'wb') do |file| file << pdf end

的Paperclip附件将文件写入模型PDF_quotes

1 个答案:

答案 0 :(得分:1)

或许这会让你朝着正确的方向前进:

&#34;我是否必须先在本地创建文件?如何使用名为quote&#34;

的Paperclip附件将文件写入模型PDF_quotes

你可以在内存中创建一个WickedPdf并直接管道到这样的Paperclip模型。

模型PDF_quote具有标准的Paperclip&#34; has_attached_file:quote&#34;

例如,在控制器中,您可以这样做:

        # Generate PDF
        pdf = WickedPdf.new.pdf_from_string(
          render_to_string('your-pdf-template-in-html.pdf') # This is a view
        )

        # Stream PDF from WickedPdf to Paperclip PDF_quote.quote
        # Content Type is automatically read by Paperclip (at least for application/pdf in my testing)
        pdf_quote = PDF_quote.new(
          # Other attributes here as well.....
          quote: StringIO.new(pdf) # Pipe pdf to quote
        )
        pdf_quote.quote_file_name = "your_quote_file_name.pdf"
        pdf_quote.save

您可以添加更多选项.pdf_from_string请参阅Paperclip GitHub。布局,页脚,标题等等......

我希望这有帮助!