如何将Prawn生成的PDF保存到公用文件夹?

时间:2016-09-23 17:07:46

标签: ruby-on-rails ruby-on-rails-4 pdf prawn

我正在使用Prawn gem在我的应用程序中生成PDF ...

应用/控制器/ orders.rb

class OrdersController < ApplicationController
  ...
  def show
    respond_to do |format|
      format.html
      format.pdf do
        require "prawn/measurement_extensions"
        ...
        #render pdf document
        send_data pdf.render, 
          filename: "order_#{@order.id}.pdf", 
          type: 'application/pdf',
          disposition: 'inline'
      end
    end
  end
  ...
end

它的显示工作正常,但我的问题是......

  • 如何在创建成功order后自动将生成的pdf保存在公共文件夹(每天的文件夹)中?我试过搜索Pra​​wn文档但我什么都没发现。
  • 如何以pdf格式显示订单?我试图评论format.html行,但它不起作用

2 个答案:

答案 0 :(得分:0)

当您致电pdf.render并将其发送到send_data的客户端时,您实际上是通过网络转储pdf的内容。您可以将pdf.render的结果转储到包含File.new的文件中,并在控制器中使用send_file,而不是这样。查看File的文档。或者,您可以使用Paperclip等内容将生成的pdf附加到特定订单。

如果您将pdf生成为服务器中的文件,则应使用send_file代替send_data。请在guides中了解详情。

答案 1 :(得分:0)

您可以使用 Prawn 的 @pytest.fixture() def foo(): return "foo" @pytest.fixture() def boo(foo): return foo + "boo" @pytest.fixture() def bar(foo): return foo + "bar" @pytest.fixture(params=['boo', 'bar'], ids=["boo_fixture", "bar_fixture"]) def final_fixture(request): return request.getfixturevalue(request.param) def _test(final_fixture): assert final_fixture.startswith('foo') 方法将生成的 PDF 保存到文件中:

render_file

查看文档:{​​{3}}