2010-10-19 10 views
2

J'utilise Rails Prawn pour générer des fichiers pdf. Maintenant que je suis capable de générer pdf avec toutes les choses nécessaires dont j'ai besoin (par exemple, table, en-tête, pied de page, logo, bordures etc ...). Maintenant, je dois utiliser les choses communes (en-tête, foooter, bordures) dans une méthode dans un module séparé et appeler cette méthode de mon programme d'origine?Prawn - comment généraliser les choses communes dans le document pdf dans un module séparé pour la réutilisation de code?

Mon programme original: travel_report.rb module TravelReport

comprennent en-tête def self.generate (start_ts, end_ts, format_type, obu_ids, intervalle) Prawn :: Document.generate («public/test. pdf ") faire

frontières

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

en-tête et les lignes limites

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 

Pied de page

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 

Module séparé pour le module frontières tête #class de Cheader < Prawn Document :: BoundingBox #include Prawn def self.border

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

end 
#end 

fin

Ce code ne crée pas de Ny frontière ... Une idée de comment créer un module séparé pour cela ????

Répondre

0
#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 

Cela fonctionne bien ...