如何安装Prawn for Rails 4
嗨,我试图实施下载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在视图中有一个link_to代码。 该视图位于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 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
祝你好运! 让我知道你是否需要更具体的东西。
我发现prawn_rails gem很有用。 注意在你的gemfile中,你需要带下划线的gem prawn_rails
,而不是短划线