0

如何使用 Wicked-pdf 下载多个 pdf

下面是我在这里使用的代码行,

@awb_orders = Spree::Order.where('created_at >= ? AND created_at <= ?', DateTime.now-1.month, DateTime.now).where(:state => 'complete').order("created_at DESC")
@awb_orders.each do |order|
  @order = order
  respond_to do |format|
    format.html
    format.pdf do
      render pdf: "file_name_#{DateTime.now}",
        save_to_file: Rails.root.join('public', "invoice_#{DateTime.now}.pdf")
     end
   end
 end

我得到以下结果

在此操作中多次调用渲染和/或重定向......“redirect_to(...)并返回”。

谁能帮助我哪里出错了?

4

1 回答 1

0

在一个普通的 Rails 控制器中,你不能render多次调用任何方法,在这里你可以为你所拥有的任意数量的订单执行此操作。

相反,我认为您需要重新组织数据,以便在单个 pdf 模板中生成所有发票,或者在 respond_to/render 循环之外生成单独的 pdf,然后将它们合并为单个 PDF 或一个包含所有内容的 zip 文件。

以下是其外观的粗略轮廓:

@awb_orders = Spree::Order.where('created_at >= ? AND created_at <= ?', DateTime.now-1.month, DateTime.now).where(:state => 'complete').order("created_at DESC")
respond_to do |format|
  format.html
  format.pdf do
    cpdf = CombinePDF.new
    @awb_orders.each do |order|
      pdfdata = render_to_string(pdf: "order_#{order.id}"
      cpdf << CombinePDF.parse(pdfdata)
    end
    send_data cpdf.to_pdf, filename: "combined.pdf", type: "application/pdf"
  end
end
于 2018-12-12T15:52:41.943 回答