【问题标题】:Create pdf using wicked_pdf and pass to carrierwave for upload使用 wicked_pdf 创建 pdf 并传递给 carrierwave 进行上传
【发布时间】:2016-08-21 01:01:13
【问题描述】:

我目前有一个使用wicked_pdf 和carrierwave 功能的rails 应用程序(4.2.1)。用户当前单击将家庭评估视图呈现为 PDF 的按钮,然后用户将 PDF 下载到他们的计算机并导航到评估表单,然后他们在其中提交 PDF 并成功上传到 AWS。

这一切都很好,但是我想做的是“简化”这个过程。当用户单击按钮时,将创建 PDF 并将其传递给carrierwave,以便使用carrierwave/fog 上传到AWS。我现在有一个视图,其中包含指向调用 FamilyAssesment.upload_assessment 方法的控制器的链接。

我一直在尝试不同的方法,但似乎无法确切了解我需要做什么才能使其正常工作。

按钮显示

<%= link_to "Upload", family_assessment_pdf_upload_url(id: "#{f.object.case.id}"), class: 'button radius default tiny pdf-button' %>

family_assessments_controller.rb

class FamilyAssessmentsController < ApplicationController

  def family_assessment_pdf_upload
    c = Case.find(params[:id])
    family_assessment = c.family_assessment
    assessment = c.assessments.where(title: 'Families First Assessment').first

    FamilyAssessment.upload_assessment(assessment, family_assessment)

    #If work is done and url saved to assessment.assessment do some redirect action here 

  end

end

family_assessment.rb

class FamilyAssessment < ActiveRecord::Base

  def self.upload_assessment(assessment, family_assessment)
    family_assessment = family_assessment
    assessment = assessment 

    #I think this is how I would create the PDF in preparation for hand off to carrierwave

    pdf = WickedPdf.new.pdf_from_string(
      render_to_string(:pdf => "family_assessment",:template => 'family_assessments/family_assessment.pdf.erb', :locals => {:family_assessment => family_assessment})
    )

    #Pass pdf to carrierwave and save url in assessment.assessment

  end

end

【问题讨论】:

    标签: ruby-on-rails amazon-web-services carrierwave fog wicked-pdf


    【解决方案1】:

    看起来您可以将 PDF 保存到临时文件,然后上传该临时文件。

    class FamilyAssessment < ActiveRecord::Base
    
      def self.upload_assessment(assessment, family_assessment)
        family_assessment = family_assessment
        assessment = assessment 
    
        #I think this is how I would create the PDF in preparation for hand off to carrierwave
    
        pdf = WickedPdf.new.pdf_from_string(
          render_to_string(:pdf => "family_assessment",:template => 'family_assessments/family_assessment.pdf.erb', :locals => {:family_assessment => family_assessment})
        )
    
        #Pass pdf to carrierwave and save url in assessment.assessment
        # Write it to tempfile
        tempfile = Tempfile.new("#{Rails.root}/tmp/assessment_#{self.id}.pdf")
        tempfile.binmode
        tempfile.write pdf_file
        tempfile.close
    
        # Attach that tempfile to the invoice
        unless pdf_file.blank?
          self.uploads.clear
          self.uploads.create(fileinfo: File.open(tempfile.path), job_id: self.job.id)
          tempfile.unlink
        end
    
      end
    
    end
    

    很多答案来自Getting PDF from WickedPDF for attachment via Carrierwave

    【讨论】:

    • 我得到了类似No such file or directory @ rb_sysopen - /var/folders/_0/f6fqddzx6sx64kkpf0l540sr0000gn/T/{Rails.root}/tmp/invoice_78.pdf20170502-46739-59eta1 的信息。你知道如何解决这个问题吗?
    • @Code-MonKy——他有几个错别字。该行应该是"#{Rails.root}/tmp/..."。注意缺少的#
    • 我修正了上述错字。
    • @Code-MonKy 使用:tempfile = Tempfile.new("test001.pdf","#{Rails.root}/tmp") 用于特定目录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多