2015-04-06 76 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