
рдкрд░рд┐рдЪрдп
рд╡рд┐рд╖рдп рдореЗрдВ, рдореИрдВ рд░реВрдмреА / рд░реЗрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреАрдбреАрдПрдл рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдиреЗ, рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ, рд╕рд╛рдЗрдЯ рд╕реЗ рд╕реАрдзреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпрд╛ рд░реЗрдХ рдХрд╛рд░реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдореЗрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд▓рдЧреНрдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рд╣рдо рд░реЗрд▓ 3.0.9 рдФрд░ рдЭреАрдВрдЧрд╛ рдордгрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЭреАрдВрдЧрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдмрдВрдбрд▓рд░
gem 'prawn', :git => "git://github.com/sandal/prawn.git", :submodules => true
рд░реЗрд▓ рдПрдХреАрдХрд░рдг
рд░рд┐рдкреЛрд░реНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБ:
$ mkdir app/reports
рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдСрдЯреЛрд▓реЙрдб рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ config / application.rb рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
config.autoload_paths << "#{Rails.root}/app/reports"
рдФрд░ рдорд╛рдЗрдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ (config / initializers / mime_types.rb)
Mime::Type.register_alias "application/pdf", :pdf
рд╣рдо рдСрдЯреЛрд▓реИрдб рдореЗрдВ рдордгрд┐ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗ (рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ) рдХреЙрдиреНтАНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ / prawn.rb
require "prawn"
рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЭреАрдВрдЧрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореИрдВ рдЖрд░рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)
$ rails c Loading development environment (Rails 3.0.9) ruby-1.9.2-p180 :001 > Prawn::BASEDIR => "/home/kir/.rvm/gems/ruby-1.9.2-p180@pdfer/bundler/gems/prawn-1288242ddece"
рдкреАрдбреАрдПрдл рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
рдЭреАрдВрдЧрд╛ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд░реВрд╕реА рдлреЛрдВрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдиреНрд╣реЗрдВ рдШрд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦреЛ, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ / рдШрд░ / kir / prawn_fontsред рд╡рд░рджрд╛рди, рдкреНрд░реЙрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдореИрдВрдиреЗ
рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред
рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╛рд╣рдХ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рдбрд╝ рдмрдирд╛рдПрдВред
rails g scaffold customer name:string amount:float
rake db:migrate
рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рднрд░реЗрдВред
рдЕрдм рдЖрдк рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд░рд┐рдкреЛрд░реНрдЯ / customers_report.rb рд╣реЛрдиреЗ рджреЗрдВ:
рдкреАрдбреАрдПрдл рдЬрдирд░реЗрдЯрд░ рддреИрдпрд╛рд░ рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдПрдХреНрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдкреАрдбреАрдПрдл рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред
def download_pdf output = CustomersReport.new.to_pdf send_data output, :type => 'application/pdf', :filename => "customers.pdf" end
рдЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
resources :customers do collection do get 'download_pdf' end end
/ рдЧреНрд░рд╛рд╣рдХреЛрдВ / download_pdf рдкрд░ рдЬрд╛рдПрдВ ред рдкрд░рд┐рдгрд╛рдо
рдПрдХ рдРрд╕рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ ред
рд░реЗрдХ рдХрд╛рд░реНрдп
рд▓реЗрдХрд┐рди рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рд░реЗрдХ рдХрд╛рд░реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдбреАрдПрдл рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (lib / рдХрд╛рд░реНрдп / customers_report.rake рдХреЛрдб):
namespace :customers_report do desc 'Generates report with customers' task :generate_pdf => :environment do output = CustomersReport.new.to_pdf filename = "report.pdf" File.open(Rails.root.join('public', filename), 'wb') do |f| f.write(output) end puts "Report was written to #{filename}" end end
рд░рдирд┐рдВрдЧ:
rake customers_report:generate_pdf --trace
рд░рд┐рдкреЛрд░реНрдЯ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / report.pdf рдореЗрдВ рдЬрдирд░реЗрдЯ рдХреА рдЬрд╛рдПрдЧреАред
рд░реЗрдХ рдХрд╛рд░реНрдп + рдореЗрд▓рд░
рдПрдХ рдФрд░ рд╕реНрдерд┐рддрд┐: рдкреАрдбреАрдПрдл рдХреЛ рдорд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдИ-рдореЗрд▓ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдореЗрд▓рд░ рдФрд░ рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореЗрд▓рд░ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ:
rails g mailer customers_mailer report_email
рдФрд░ рдХреЛрдб рдРрдк / рдореЗрд▓рд░реНрд╕ / customers_mailer.rb рдмрджрд▓реЗрдВ:
class CustomersMailer < ActionMailer::Base default :from => "me@yandexteam.ru"
рдФрд░ рдЗрд╕рдХреЗ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╣рдо рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд╕рдорд╛рди рдХрд╛рд░реНрдп / рдХрд╛рд░реНрдп / customers_report.rake):
namespace :customers_report do desc 'Generates report with customers' task :generate_pdf => :environment do
рд╣реЛ рдЧрдпрд╛ред рдкрд░реНрдпрд╛рд╡рд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддреЗ рдФрд░ рдПрдХреНрд╢рди_рдореЗрд▓рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛!
рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
rake customers_report:send_by_email --trace
рд╕рдВрджрд░реНрдн:
Github рдкрд░ рдЭреАрдВрдЧрд╛ рдХрд╛ рднрдВрдбрд╛рд░:
https://github.com/sandal/prawn/рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рднрдВрдбрд╛рд░:
https://github.com/kirs/pdferGithub рдкрд░ рдЭреАрдВрдЧрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
https://github.com/sandal/prawn/wiki/Using-Prawn-in-RailsрдкреАрдПрд╕ рдиреЗ рд░реЗрд▓реНрд╕ рдХреНрд▓рдм рдореЗрдВ рдЕрдкреНрд░реИрд▓ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рджрд┐рдорд┐рддреНрд░реА рдЧреИрд▓рд┐рдВрд╕реНрдХреА рдХреЛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдпрд╛!