
はじめに
このトピックでは、Ruby / Railsを使用してPDFドキュメントを作成、生成、サイトから直接ダウンロード、またはrakeタスクを介して作成し、メーラー経由で添付ファイルとして送信する機能を検討します。
Rails 3.0.9とPrawn gemを使用します。
エビのインストール
バンドラー
gem 'prawn', :git => "git://github.com/sandal/prawn.git", :submodules => true
レール統合
レポートクラスのディレクトリを作成します。
$ mkdir app/reports
config / application.rbのこのディレクトリからクラスを自動ロードするには:
config.autoload_paths << "#{Rails.root}/app/reports"
そして、MIMEタイプを登録します(config / initializers / mime_types.rb)
Mime::Type.register_alias "application/pdf", :pdf
autoload(以前にファイルを作成した)config / initializers / prawn.rbにgemを含めます
require "prawn"
エビが動作するかどうかを確認する(RVMを使用)
$ 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"
PDFを生成
Prawnがキリル文字をサポートするには、ロシア語のフォントを提供する必要があります。 それらをホームディレクトリに入れて、/ home / kir / prawn_fontsにします。 Prawnとの作業でテストされたVerdanが
ここに投稿し
ました 。
データを含むテーブルを作成するには、Customerモデルでスキャフォールドを作成します。
rails g scaffold customer name:string amount:float
rake db:migrate
テーブルにデータを入力します。
これで、レポートファイルジェネレーターを作成できます。 次のコードでapp / reports / customers_report.rbにします:
PDFジェネレーターの準備ができました。 顧客アクションコントローラーに追加します。これは、PDFのダウンロードを担当します。
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
/ customers / download_pdfに移動し
ます 。 結果
はそのような文書です。
すくいタスク
しかし、rakeタスクを介してPDFを生成したいとします。 実装を検討してください(lib / tasks / 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
レポートは、public / report.pdfで生成されます。
熊手タスク+メーラー
別の状況:PDFは毎月電子メールで送信する必要があります。 これを行うには、メーラーと別のタスクを作成する必要があります。
メーラーの生成:
rails g mailer customers_mailer report_email
およびコードapp /
rails g mailer customers_mailer report_email
/ customers_mailer.rbを変更します:
class CustomersMailer < ActionMailer::Base default :from => "me@yandexteam.ru"
また、送信用のタスクも規定しています(同じlib / tasks / customers_report.rake):
namespace :customers_report do desc 'Generates report with customers' task :generate_pdf => :environment do
できた 環境パラメーターで実際のアドレスとaction_mailer設定を指定することを忘れないでください!
パフォーマンスの確認:
rake customers_report:send_by_email --trace
参照:
Githubのエビリポジトリ:
https :
//github.com/sandal/prawn/記事に記載されているデモアプリケーションを使用した私のリポジトリ:
https :
//github.com/kirs/pdferGithubへのPrawnのインストールについて:
https :
//github.com/sandal/prawn/wiki/Using-Prawn-in-RailsPS Rails Clubでの4月のプレゼンテーションについて、evroneのDmitry Galinskyに感謝します!