用大虾生成pdf中的table
Generate table in pdf with prawn
我已经在controller中使用prawn pdf gem成功生成了pdf文件,但是我想分离class个文件并调用class的方法制作controller代码看起来干净。
这是我的控制器内方法
def download_pdf
if Subscriber.count<50
addSubscribers()
else
@subscribers=Subscriber.all.order("name ASC")
end
respond_to do |format|
format.pdf do
pdf = Prawn::Document.new
table_data = Array.new
table_data << ["Name","E-mail","Phone"]
@subscribers.each do |p|
table_data << [p.name, p.email,p.phone]
end
pdf.table(table_data, :width => 500, :cell_style => { :inline_format => true })
send_data pdf.render, filename: 'test.pdf', type: 'application/pdf', :disposition => 'inline'
end
end
结束
但是当我尝试使用下面的代码时->
def download_pdf
@subscribers=Subscriber.all.order("name ASC")
PdfCreator.new(@subscribers)
end
而 PdfCreator class 是 ->
class PdfCreator
def initialize(subscribers)
@subs=subscr
download_pdf()
end
def download_pdf()
pdf = Prawn::Document.new
table_data = Array.new
table_data << ["Name","E-mail","Phone"]
@subs.each do |p|
table_data << [p.name, p.email,p.phone]
end
pdf.table(table_data, :width => 500, :cell_style => { :inline_format => true })
send_data pdf.render, filename: 'test.pdf', type: 'application/pdf', :disposition => 'inline'
end
end
响应不是作为一种方法进行解析。我找到了一些关于从外部生成 pdf 的代码 class 但仅适用于普通文本而不适用于表格 - 有关如何为表格执行此操作的任何帮助,这将是一个很大的帮助
send_data
是控制器级别的方法,不会在您的自定义 class 中工作,您的路由可能需要 respond_to
才能做出适当的响应。
让我们尝试保留控制器中需要的内容,并仅将 PDF 生成逻辑提取到新的 PdfCreator
class:
def download_pdf
@subscribers=Subscriber.all.order("name ASC")
respond_to do |format|
format.pdf do
pdf = PdfCreator.new(@subscribers)
send_data pdf.render, filename: 'test.pdf', type: 'application/pdf', disposition: 'inline'
end
end
end
class PdfCreator
def initialize(subscribers)
@subs=subscribers
end
def render()
pdf = Prawn::Document.new
table_data = Array.new
table_data << ["Name","E-mail","Phone"]
@subs.each do |p|
table_data << [p.name, p.email,p.phone]
end
pdf.table(table_data, :width => 500, :cell_style => { inline_format: true })
pdf.render
end
end
我已经在controller中使用prawn pdf gem成功生成了pdf文件,但是我想分离class个文件并调用class的方法制作controller代码看起来干净。 这是我的控制器内方法
def download_pdf
if Subscriber.count<50
addSubscribers()
else
@subscribers=Subscriber.all.order("name ASC")
end
respond_to do |format|
format.pdf do
pdf = Prawn::Document.new
table_data = Array.new
table_data << ["Name","E-mail","Phone"]
@subscribers.each do |p|
table_data << [p.name, p.email,p.phone]
end
pdf.table(table_data, :width => 500, :cell_style => { :inline_format => true })
send_data pdf.render, filename: 'test.pdf', type: 'application/pdf', :disposition => 'inline'
end
end
结束
但是当我尝试使用下面的代码时->
def download_pdf
@subscribers=Subscriber.all.order("name ASC")
PdfCreator.new(@subscribers)
end
而 PdfCreator class 是 ->
class PdfCreator
def initialize(subscribers)
@subs=subscr
download_pdf()
end
def download_pdf()
pdf = Prawn::Document.new
table_data = Array.new
table_data << ["Name","E-mail","Phone"]
@subs.each do |p|
table_data << [p.name, p.email,p.phone]
end
pdf.table(table_data, :width => 500, :cell_style => { :inline_format => true })
send_data pdf.render, filename: 'test.pdf', type: 'application/pdf', :disposition => 'inline'
end
end
响应不是作为一种方法进行解析。我找到了一些关于从外部生成 pdf 的代码 class 但仅适用于普通文本而不适用于表格 - 有关如何为表格执行此操作的任何帮助,这将是一个很大的帮助
send_data
是控制器级别的方法,不会在您的自定义 class 中工作,您的路由可能需要 respond_to
才能做出适当的响应。
让我们尝试保留控制器中需要的内容,并仅将 PDF 生成逻辑提取到新的 PdfCreator
class:
def download_pdf
@subscribers=Subscriber.all.order("name ASC")
respond_to do |format|
format.pdf do
pdf = PdfCreator.new(@subscribers)
send_data pdf.render, filename: 'test.pdf', type: 'application/pdf', disposition: 'inline'
end
end
end
class PdfCreator
def initialize(subscribers)
@subs=subscribers
end
def render()
pdf = Prawn::Document.new
table_data = Array.new
table_data << ["Name","E-mail","Phone"]
@subs.each do |p|
table_data << [p.name, p.email,p.phone]
end
pdf.table(table_data, :width => 500, :cell_style => { inline_format: true })
pdf.render
end
end