Креветка - как обобщить обычные вещи в документе PDF в отдельный модуль для повторного использования кода? - PullRequest
2 голосов
/ 19 октября 2010

Я использую Rails Prawn для создания PDF-файлов. Теперь, когда я могу создавать PDF со всеми необходимыми вещами (например, таблица, верхний колонтитул, нижний колонтитул, логотип, границы и т. Д.) Теперь мне нужно использовать общие вещи (header, Foooter, border) в методе внутри отдельного модуля и вызвать этот метод из моей исходной программы?

Моя оригинальная программа: travel_report.rb модуль TravelReport

включает заголовок def self.generate (start_ts, end_ts, format_type, obu_ids, interval) Prawn :: Document.generate ("public / test.pdf") do

Граница

page_count.times do |i|
go_to_page(i+1)
Header.border
end

Заголовок и пограничные линии

page_count.times do |i|
   go_to_page(i+1)
ask = "public/ashok.jpg"
    image ask, :at => [15, 750], :width => 120
    alert = "public/alert.jpg"
    image alert, :at => [410, 740], :width => 120
  end

сноска

 page_count.times do |i|
  go_to_page(i+1)
  lazy_bounding_box([bounds.left+30, bounds.bottom + 20], :width => 100) {
    text "Bypass Report"
   }.draw
  end
end 

Отдельный модуль для границ Заголовок модуля #class Cheader

      pdf = Prawn::Document.new
      pdf.bounding_box([5, 705], :width => 540, :height => 680) do
         pdf.stroke_bounds
        end

end
#end

конец

Этот код не создает никаких границ ... Любая идея, как создать отдельный модуль для этого ????

1 Ответ

0 голосов
/ 20 октября 2010
#create a separate module

#program



include HeaderFooter
Prawn::Document.generate("public/test.pdf") do |pdf|
pdf.page_count.times do |i|
        pdf.go_to_page(i+1)
        HeaderFooter.border(pdf)      
        #render :partial => 'header', :locals => {:ppdf => pdf}
      end

#Header and Boundary Lines      
      pdf.page_count.times do |i|
        pdf.go_to_page(i+1)
          HeaderFooter.image(pdf)
      end
#footer
      pdf.page_count.times do |i|
       pdf.go_to_page(i+1)
        HeaderFooter.footer(pdf)
      end
    end 




create a module to define the methods(header_footer.rb)
module HeaderFooter
    #Method for border creation in pdf
    def self.border(ppdf)
       ppdf.bounding_box([5, 705], :width => 540, :height => 680) do
       ppdf.stroke_bounds
      end
    end
    #method to create the logos in the pdf
    def self.image(ppdf)
      ask = "public/ashok.jpg"
      ppdf.image ask, :at => [15, 750], :width => 120
      alert = "public/alert.jpg"
      ppdf.image alert, :at => [410, 740], :width => 120
    end
    #method to print footer text in the pdf
    def self.footer(ppdf)
      ppdf.lazy_bounding_box([ppdf.bounds.left+30, ppdf.bounds.bottom + 20], :width => 100) {
      ppdf.text "Bypass Report"
       }.draw
    end

end

Это прекрасно работает ...

...