2015-04-06 72 views
0

我试图做使用PrawnPDF高度格式化的文档,并想办法调用一个函数来一遍又一遍,但在不同的地方产生文本的特定部分。我有什么是这个调用预先定义的代码块

@pdf = Prawn::Document.new(:margin => [5, 5], :page_size => 'A4') do 
    text 
    text 
    <insert general text> 
    text 
    text 
    <insert general text> 
    etc etc 
end 

pdf.generate("output.pdf") 

一般的文字我想插入的是:

pdf.bounding_box([column_check,pdf.cursor], :width => 250, :height => 12) do 
    pdf.stroke_color "894131" 
    pdf.stroke do 
     pdf.fill_color "894131" 
     pdf.fill_and_stroke_rounded_rectangle [pdf.cursor - 12,pdf.cursor], 288, 12, 0 
     pdf.fill_color 'FFFFFF' 
    end 

    pdf.pad(5) do 
     pdf.draw_text(prices[:manganese], :at => [4, pdf.cursor - 4], :size => 6) 
    end 
    pdf.fill_color '000000' 
end 
pdf.move_down 2 

(我已经改变了我所生成的PDF是隐含的方式)

它看起来并不像我可以从虾:: Document.new块中调用一个函数,我怎么能解决这个问题?我不知道那么多节目,所以我觉得有使用产量块,或者一个进程,或者说一个解决方案,我没有用太多的经验...

(基本上每个我这个时候打电话我希望能够呼吁价格哈希不同的符号)

回答

1

因为它需要访问该块范围之外的方法,我会用generate()有明确块的形式:

def general_text(pdf) 
    pdf.bounding_box(...) do 
    # ... 
    end 
    pdf.move_down 2 
end 

@pdf = Prawn::Document.generate("output.pdf", {:margin => [5, 5], :page_size => 'A4'}) do |pdf| 
    pdf.text 
    pdf.text 
    general_text(pdf) 
    pdf.text 
    pdf.text 
    general_text(pdf) 
    # ... 
end 

没有检查它自己,但认为应该工作。

UPDATE 要使用不同的密钥对散列,添加另一个参数general_text()方法:

def general_text(pdf, key) 
    # ... prices[key] ... 
end 

@pdf = Prawn::Document.generate(...) do |pdf| 
    ... 
    general_text(pdf, :manganese) 
    ... 
end