gem 'wicked_pdf'
Terminalden rails generate wicked_pdf komutu ile projemize entegre edelim.Proje dizinizmizde config/initializers/mime_types.rb dosyası oluşacaktır. Bu dosyanın içine aşağıdaki satırı ekleyelim.
Mime::Type.register "application/pdf", :pdf
Gerekli olan ikinci gem ise ;
gem 'wkhtmltopdf-binary'
bundle install komutundan sonra config/initializers/wicked_pdf.rb dosyası oluşacaktır içerisine ; WickedPdf.config = {
:exe_path => '/usr/local/bin/wkhtmltopdf'
}
komutu yazalım.Pdf formatında almak istediğimiz sayfanın(benim projemde rerport modelinin show sayfası) pdf.slim (.haml yada erb de olabilir) uzantılı kopyasını, views/layouts/ dizini içerisine alalım. views/layouts/show.pdf.slim içerisindeki komutlar views/reports/show.html.slim ile aynı olmalı.
report_controller.rb içerisindeki show metodunun içine;
def show
@report=Report.find(params[:id])
if(params[:format]=="pdf")
respond_to do |format|
format.pdf do
render :pdf => "reports",
:template => '/reports/show.html.slim',
:layout => "/layouts/show.pdf.slim",
:encoding => 'utf8'
end
end
end
end
encoding=>'utf8' pdf dosyasında türkçe karakterleri tanımasını sağlar.daha bitmedi, projemizin index sayfasından görüntülemeye geldiğimiz için index sayfasındaki görüntüleme butonunu aşağıdaki şekilde güncelliyoruz;
td=link_to "PDF" ,report_path(report,:format => 'pdf') normal aldığı parametrenin yanına sadece :format=>"pdf" ekliyoruz
evet şimdi çalıştıralım..Uppss hata ile karşılaştık
wkhtmltopdf exe'sinin yerini bulamıyor, terminalden which wkhtmltopdf yazıp yola bakalım.
/home/esryrlmz/.rbenv/shims/wkhtmltopdf
Evvet bizim belirttiğimiz yerden farklı bir yere kurulmuş, wicked_pdf dosyasındaki exe yolunu değiştirelim WickedPdf.config = {
:exe_path => '/home/esryrlmz/.rbenv/shims/wkhtmltopdf'
}
Tekrar çalıştıralım..
Sitemizdeki Show ekranımız:
Oluşturulan Pdf..
Kaynak: https://github.com/mileszs/wicked_pdf
Not 1: Eğer bootstrap görüntüsüyle almak isterseniz:
stylesheets/pdf.css.scss oluşturun ve içerisine
@import "bootstrap-sprockets";
@import "bootstrap";
@import "bootstrap/variables";
@import "bootstrap/mixins";
@include make-grid(sm);
@include make-grid(md);
@include make-grid(lg);
görüntüsünü almak istediğiniz pdf.erb uzantılı dosyanın içerisine;
<!DOCTYPE html>
<html>
<head>
<%= wicked_pdf_stylesheet_link_tag "pdf.css" -%>
<%= csrf_meta_tags %>
</head>
<body>
//rapor içeriği
</body>
</html>
Not:2 Eğer pdf tek bir syaf değilde birden fazla sayfa olmasını isterseniz sayfayı ayırmak istediğiniz yere;
<p style="page-break-after: always"></p>