Gererating PDF using Wicked PDF in Ruby on Rails

Hiện tại, vì công việc quá bận rộn nên mình không còn thời gian để post bài và duy trì nội dung cho blog nữa. Do đó tại thời điểm này, mình quyết định ngừng phát triển blog. Mọi bài viết sẽ vẫn được lưu trữ và mình sẽ cố gắng hỗ trợ tất cả các bạn khi có comment hỏi. Cảm ơn các bạn đã ủng hộ blog suốt thời gian qua !
Trong project viết bằng Ruby on Rails mình đang làm thì có chức năng xuất file report ra định dạng PDF. Sau một hồi tìm hiểu thì mình cũng tìm được 2 cái gem hỗ trợ việc này khá tốt là Wicked PDFPDFkit.
Bài viết này sẽ chia sẻ cho các bạn cách cài đặt và sử dụng Wicked PDF và các lỗi mình từng gặp phải trong quá trình code.


1. Install wkhtmltopdf



Do Wicked PDF được viết dựa trên thư viện wkhtmltopdf nên trước hết bạn cần cài thư viện này vào máy.

- Nếu bạn dùng Windows thì cần download file installer dưới đây và cài bình thường: https://code.google.com/p/wkhtmltopdf/downloads/wkhtmltopdf-0.9.9-installer.exe

- Nếu dùng Linux thì bạn dùng lệnh

$ sudo gem install wkhtmltopdf-binary # rvmsudo if using rvm


hoặc thêm dòng này vào Gemfile trong project là được

gem 'wkhtmltopdf-binary'


Để kiểm tra xem wkhtmltopdf cài đặt hay chưa, bạn dùng lệnh

$ wkhtmltopdf --help


2. Install wicked_pdf gem



Thêm dòng này vào Gemfile, rồi chạy lệnh bundle install

gem "wicked_pdf", "~> 0.9.7"


3. Configure wicked_pdf



Tạo file trong thư mục config/initializers/wicked_pdf.rb

WickedPdf.config = {

  :exe_path => '/path/to/wkhtmltopdf'

}


Lưu ý phần này khá quan trọng, bạn cần nhập đúng đường dẫn màu đỏ
- Trên Windows thường sẽ là C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe
- Trên Linux sẽ là /usr/local/bin/wkhtmltopdf

Có 2 lỗi thường xảy ra là
- Bad wkhtmltopdf's path: bạn cấu hình sai đường dẫn
- Permisson denied: bạn chỉ đường dẫn đến thư mục thay vì file (.exe)

4. Render PDF in your Controller and View



Giả sử bạn cần export một Order ra file PDF

#app/controllers/orders_controller.rb

def export

  respond_to do |format|

	format.html

	format.pdf do

	  render :pdf => "ten_file_khi_download",

	            :template => 'orders/export.html.erb'

	  end

	end

  end

end


Nội dung file view bạn có thể tạo tùy ý

#app/views/orders/export.html.erb

<h1>Hello !</h1>

<p>This is just a test PDF export</p>


Để test chức năng export ra PDF này thì bạn chỉ cần thêm format=pdf vào url là được
Ví dụ bạn xem order ở dạng HTML bình thường thì dùng http://localhost/orders/export?id=XXX
Muốn export ra PDF thì dùng http://localhost/orders/export?id=XXX&format=pdf

Bạn có thể vào Github của plugin này để xem thêm các options và cách chèn image, css vào file PDF.

Chúc các bạn thành công !

 

Web Design Technology blogs [ itdl ] Auto Backlink

HomeBlog ArchiveServicesLink2MeContactSubmit your PostPost RSS

Copyright © 2012 [ itdl ] Just for Share. Designed by Ngoc Luong - Freelancer

Best view in Chrome 11+, Firefox 5+ with resolution 1024 x 768 pixel. Powered by Blogger.