WickedPDF 在尝试呈现多个 pdf 时生成空白 pdf

WickedPDF generating blank pdfs when attempting to render multiple pdfs

我在 Rails 6 项目中使用 WickedPDF 从 HTML 生成 PDF,然后将它们与预填充的 PDF 表单合并。 WickedPDF 生成的 PDF 分为两个部分,每个部分都必须与一个表格组合。表格必须出现在各自部分的开头。

我尝试使用 WickedPDF 生成两个 PDF,然后使用 combine_pdf 以适当的顺序将它们与预填表格合并。

render_ar_docsrender_gl_docs 在我单独访问它们的路线时都按预期工作:它们生成并保存预期的 PDF。但是,当我在 print_complete_docs 操作中按顺序调用它们时,生成的 PDF 是一个空白页。

如何通过一次操作生成多个 PDF?

感谢您的帮助。

def print_complete_docs
    @policy.fill_and_save_acord28
    @policy.fill_and_save_acord25
    render_ar_docs
    render_gl_docs
    pdf = CombinePDF.new
    pdf << CombinePDF.load("tmp/acord28.pdf")
    pdf << CombinePDF.load("tmp/ar_docs.pdf")
    pdf << CombinePDF.load("tmp/acord25.pdf")
    pdf << CombinePDF.load("tmp/gl_docs.pdf")
    pdf.save "tmp/complete_docs.pdf"
    send_file("#{Rails.root}/tmp/complete_docs.pdf", filename: "tmp/#{@policy.legal_vesting} Complete Docs.pdf", type: 'application/pdf')
  end

  def render_ar_docs
    render pdf: 'ar_docs', 
           layout: 'document',
           save_to_file: Rails.root.join('tmp', "ar_docs.pdf"),
           save_only: true
  end
  
  def render_gl_docs
    render pdf: 'gl_docs', 
           layout: 'document',
           save_to_file: Rails.root.join('tmp', "gl_docs.pdf"),
           save_only: true
  end

我的问题似乎与尝试在单个请求中多次呈现有关,Rails 不允许这样做。相反,我应该使用 WickedPDF 的 pdf_from_string 方法。

我的新方法(过于冗长且未经重构,但功能强大)如下所示:

def print_complete_docs
    @policy.fill_and_save_acord28
    @policy.fill_and_save_acord25
    render_ar_docs
    render_gl_docs
    
    pdf = CombinePDF.new
    pdf << CombinePDF.load("tmp/acord28.pdf")
    pdf << CombinePDF.load("tmp/ar_docs.pdf")
    pdf << CombinePDF.load("tmp/acord25.pdf")
    pdf << CombinePDF.load("tmp/gl_docs.pdf")
    pdf.save "tmp/complete_docs.pdf"
    send_file("#{Rails.root}/tmp/complete_docs.pdf", filename: "tmp/#{@policy.legal_vesting} Complete Docs.pdf", type: 'application/pdf')
  end
  
  def render_ar_docs
    ar_docs = WickedPdf.new.pdf_from_string(
      render_to_string(
        'policies/ar_docs.html.erb',
        layout:'document.html.erb',
        locals: { policy: @policy }
      ),
      layout: 'document.html.erb'
    )
    save_path = Rails.root.join('tmp','ar_docs.pdf')
    File.open(save_path, 'wb') do |file|
      file << ar_docs
    end
  end

  def render_gl_docs
    gl_docs = WickedPdf.new.pdf_from_string(
      render_to_string(
        'policies/gl_docs.html.erb',
        layout:'document.html.erb',
        locals: { policy: @policy }
      ),
      layout: 'document.html.erb'
    )
    save_path = Rails.root.join('tmp','gl_docs.pdf')
    File.open(save_path, 'wb') do |file|
      file << gl_docs
    end
  end
  

PS:感谢@Unixmonkey 的帮助,以及他对 WickedPDF 的贡献!