虾PDF和空数据库单元格?

时间:2010-08-03 10:57:36

标签: ruby-on-rails pdf pdf-generation prawn

我正在使用Prawn PDF在我的Rails应用程序中动态创建PDF文件。

我最近遇到了rails cell.blank?函数,事实证明它非常方便,如果没有什么可显示的话,我可以隐藏我想要的任何<li>行 - 我一直想知道的是一会儿!

是否有可能在Prawn中做同样的事情?如果它是空的,请隐藏一行?

目前如果我有以下内容:

Contact Name
Address Line 1
Address Line 2
Address Line 3
Postcode
Phone Number
Fax Number

例如,如果用户只输入了联系人姓名和邮政编码,则地址行的1,2和3应该存在显着差距。

如果我可以忽略这些行,因为它们是空的并显示为:

Contact Name
Postcode

它会整理我的PDF并保存用户不得不使用不正确的字段以确保PDF中的地址正确。

这就是我的Prawn代码:

pdf.text_box "Client", :size => 9, :at => [50,673]
    pdf.text_box "#{@kase.company.companyname}", :size => 9, :at => [100,673]
    pdf.text_box "#{@kase.company.companyaddressline1}", :size => 9, :at => [100,665]
    pdf.text_box "#{@kase.company.companyaddressline2}", :size => 9, :at => [100,655]
    pdf.text_box "#{@kase.company.companyaddressline3}", :size => 9, :at => [100,645]
    pdf.text_box "#{@kase.company.companyaddresscity}", :size => 9, :at => [100,635]
    pdf.text_box "#{@kase.company.companyaddresspostcode}", :size => 9, :at => [100,625]

我搜索了Prawn google用户组网站,但似乎无法找到我需要的内容。

提前致谢!

丹尼

3 个答案:

答案 0 :(得分:1)

pdf bounding box(从大虾文档中无耻地抽出来)。

   pdf.bounding_box([100,400], :width => 400) do
     pdf.text("The height of this box is #{pdf.bounds.height}")
     pdf.text('this is some text')
     pdf.text('this is some more text')
     pdf.text('and finally a bit more')
     pdf.text("Now the height of this box is #{pdf.bounds.height}")
   end
如果属性可用,

可以轻松修改以打印。

答案 1 :(得分:0)

使用计数器作为当前地址行的y坐标。如果添加一行,则将其减少10.如果您的行为空,请不要添加它,也不要增加y坐标。

y = 673
if @line1 then 
  pdf.text_box "#{@line1}", :size => 9, :at => [100,y]
  y+= 10
end 
if @line2 then 
  pdf.text_box "#{@line2}", :size => 9, :at => [100,y]
  y+= 10
end 

提示:如果它按您想要的方式工作 - 将其重构为一个添加该行并增加您的计数器的函数)

答案 2 :(得分:0)

你应该可以使用Ruby的'空?'方法,可用于大多数数据结构和字符串,以确定您的字符串或数据结构是否包含任何内容。有点像(我不太了解大虾,但这个公司名称看起来像是一个字符串,所以我不认为你需要把它投射出来):

pdf.text_box @kase.company.companyname, :size => 9, :at => [100,673] unless @kase.company.companyname.empty?

当然,你可以把它变成一个辅助方法

def my_text_box (var, x, y)
  pdf.text_box var, :size => 9, :at => [x,y] if unless var.empty?
end

并调用您的虾文档

my_text_box @kase.company.companyname, 100, 673
哎呀,忘了把ref添加到空? http://apidock.com/ruby/String/empty%3F