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 PDF và PDFkit.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à đượcVí 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 !