Ruby on rails 如何为Rails 4安装Prawn

Ruby on rails 如何为Rails 4安装Prawn,ruby-on-rails,pdf,ruby-on-rails-4,pdf-generation,prawn,Ruby On Rails,Pdf,Ruby On Rails 4,Pdf Generation,Prawn,嗨,我正在尝试下载PDF收据。我不知道如何将Prawn与Rails 4应用程序集成,也找不到任何关于如何集成的教程。请看下面我所做的事情。有人能给我推荐一些文章或一些建议吗 1添加了虾宝石并安装了捆绑包 2添加控制器代码以呈现PDF respond_to do |format| format.html format.pdf do pdf = OrderPdf.new(@order, view_context) send_data pdf.render, filename:

嗨,我正在尝试下载PDF收据。我不知道如何将Prawn与Rails 4应用程序集成,也找不到任何关于如何集成的教程。请看下面我所做的事情。有人能给我推荐一些文章或一些建议吗

1添加了虾宝石并安装了捆绑包

2添加控制器代码以呈现PDF

respond_to do |format|
  format.html
  format.pdf do
    pdf = OrderPdf.new(@order, view_context)
    send_data pdf.render, filename: "order_#{@order.order_number}.pdf",
                          type: "application/pdf",
                          disposition: "inline"
  end
end
3在视图中有一个指向代码的链接。该视图位于App>PDF

<%= link_to "Download PDF", order_path(@order, format: pdf) %>

我不确定您需要帮助的是哪一部分,但以下是我如何做到的。在下面的代码中,我正在创建收据的pdf并将其存储在数据库中。输出如下所示-

也许这会有所帮助

class Omni::ReceiptWorksheet < Omni::Receipt

  def print(receipt)
    pdf = header receipt

    data = []
    data[0] = ["PO Nbr","Carton Nbr","Sku Nbr","Sku Description","S/U Open","S/U per Pack","Packs Open", "Packs Received"]

    receipt.receipt_details.each_with_index do |detail,i|
      selling_units = detail.purchase_detail.selling_units_approved - detail.purchase_detail.selling_units_received - detail.purchase_detail.selling_units_cancelled
      data[i+1] = [detail.purchase.purchase_nbr,' ', detail.sku.sku_nbr, detail.sku.display, selling_units, detail.receipt_pack_size, selling_units / detail.receipt_pack_size, ' ']
    end

    pdf.move_down 110

    pdf.table(data) do |t|
      t.style(t.row(0), :background_color => '0075C9')
      t.header = true
    end

    pdf.number_pages "page <page> of <total>", { :at => [pdf.bounds.right - 150, 0], width: 150, align: :right, page_filter: (1..50), start_count_at: 1, color: "002B82" }
    attach StringIO.new(pdf.render), "receiving_worksheet#{Date.today}.pdf", receipt
  end

  def header(receipt)
    pdf = Prawn::Document.new
    pdf.font_size = 12
    pdf.draw_text "Printed on: #{Date.today}", at: [0, 670]
    pdf.draw_text "Receiving Worksheet", at: [220, 670]
    pdf.draw_text "Page 1", at: [480, 670]

    pdf.draw_text "Receipt #: #{receipt.receipt_nbr}", at: [0, 650]
    pdf.draw_text "Receipt Date: #{Date.today}", at: [400, 650]

    pdf.draw_text "Receiving Location: #{receipt.location_display}", at: [0, 640]
    pdf.draw_text "Carrier Name: #{receipt.carrier_supplier.display}", at: [0, 620]
    pdf.draw_text "Bill of Lading: #{receipt.bill_of_lading_number}", at: [450, 620]
    pdf
  end

  def attach(file, file_name, receipt)
    attachment = Buildit::Attachment.create(
      attachable_type: "Omni::Receipt",
      attachable_id: receipt.receipt_id,
      file_name: file_name,
      mime_type: 'application/pdf',
      byte_size:  file.size,
      locale:   'en',
      is_enabled: true
    )

    Buildit::Content.create(
    contentable_type: "Buildit::Attachment",
    contentable_id:  attachment.attachment_id,
    data: file.read
    )
  end

end
class Omni::Receipt工作表“0075C9”)
t、 header=true
结束
pdf.number_pages“第页,共页,{:at=>[pdf.bounds.right-150,0],宽度:150,对齐::右侧,页面过滤器:(1..50),开始计数:1,颜色:“002B82”}
附上StringIO.new(pdf.render),“接收工作表#{Date.today}.pdf”,收据
结束
def收割台(收据)
pdf=对虾::Document.new
pdf.font\u size=12
pdf.draw_text“打印日期:{Date.today}”,网址:[0670]
pdf.draw_text“接收工作表”,网址:[220670]
pdf.draw_text“第1页”,网址:[480670]
pdf.draw_text“收据:{Receipt.Receipt_nbr}”,网址:[0650]
pdf.draw_text“接收日期:{Date.today}”,网址:[400650]
pdf.draw_text“接收位置:{receipt.Location_display}”,地址:[0640]
pdf.draw_text“承运人名称:{receipt.Carrier_supplier.display}”,网址:[0620]
pdf.draw_text“提单:{收据.提单编号}”,网址:[450620]
pdf
结束
def附件(文件、文件名、收据)
attachment=Buildit::attachment.create(
可附加类型:“Omni::Receipt”,
可附加的\u id:receipt.receipt\u id,
文件名:文件名,
mime_类型:“应用程序/pdf”,
字节大小:file.size,
地区:'en',
是否启用了_:true
)
Buildit::Content.create(
可满足的_类型:“Buildit::Attachment”,
可满足的\u id:attachment.attachment\u id,
数据:file.read
)
结束
结束
下面是我上传和下载附件的控制器

class ContentController < ActionController::Base

  def download

    content     = Buildit::Content.find_by_content_id(params[:file_id])
    contentable = content.contentable
    file_name   = (contentable ? contentable.file_name : 'file')

    send_data content.data, :disposition => 'attachment', :filename => file_name

  end # def download

  def upload
    begin
      content = Buildit::Content.create(
        data: params[:file].read
      )

      result = {
        success:        true,
        content_id:     content.content_id,
        file_name:      params[:file].original_filename,
        mime_type:      params[:file].content_type,
        byte_size:      params[:file].size
      }
    rescue
      result = {success: false}
    end

    render text: result.to_json, status: 200
  end # def upload

end # class ContentController
class ContentControllerattachment',:filename=>file\u name
结束#def下载
def上传
开始
content=Buildit::content.create(
数据:参数[:文件]。读取
)
结果={
成功:没错,
content\u id:content.content\u id,
文件名:params[:file]。原始文件名,
mime类型:参数[:文件]。内容类型,
字节大小:参数[:文件].size
}
营救
结果={success:false}
结束
呈现文本:result.to_json,状态:200
结束#def上传
结束#类内容控制器

祝你好运!如果您需要更具体的信息,请告诉我。

我发现这本书很有用。注意,在gem文件中,您需要
gem prawn\u rails
带下划线,而不是破折号

Pan:有人花时间帮助您。我相信他很感激一些反馈或者一个被接受的答案。