Tạo file PDF với gem wicked_pdf
Giới thiệu
Trước đây, mình đã từng tạo CV bằng HTML, nhưng lại không biết làm thế nào để generate ra file PDF cho đến khi biết đến gem này wicked_pdf
, nó sử dụng wkhtmltopdf
để generate PDF từ file HTML.
Vậy làm thế nào để tích hợp nó vào trong dự án Ruby on Rails?
Cài đặt
Do wicked_pdf là dùng wkhtmltopdf để tạo ra file pdf nên bạn cũng cần phải thêm nó vào Gemfile
gem "wicked_pdf"
gem "wkhtmltopdf-binary", group: :development
gem "wkhtmltopdf-heroku", group: :production
Trường hợp wkhtmltopdf-binary không nằm trên đường dẫn của máy chủ web, bạn có thể config nó.
WickedPdf.config = {
exe_path: '/usr/local/bin/wkhtmltopdf',
enable_local_file_access: true
}
Tiếp theo chạy bundle
và rails g wicked_pdf
khởi tạo wicked_pdf
Nếu bạn sử dụng Rails 4 trở xuống thì phải config thêm file sau:
Mime::Type.register "application/pdf", :pdf
Cách dùng
Do wkhtmltopdf binary được chạy bên ngoài ứng dụng Rails nên những layout bình thường sẽ không hoạt động. Nếu bạn muốn sử dụng CSS, JS hay hình ảnh nào đó thì bạn cần phải sửa file layouts của mình như sau:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
<%= wicked_pdf_stylesheet_link_tag "pdf" %>
<%= wicked_pdf_javascript_include_tag "number_pages" %>
</head>
<body>
<div id="header">
<%= wicked_pdf_image_tag 'thumbnail.png', height: "30", width: "auto %>
</div>
<div id="content">
<%= yield %>
</div>
</body>
</html>
Tạo controller để xử lý việc export pdf
def index
@posts = Post.all
respond_to do |format|
format.html
format.pdf do
render template: "posts/index.html.erb",
pdf: "Posts: #{@posts.count}",
disposition: "attachment" # default inline
end
end
end
disposition: "attachment"
cho phép bạn có thể tải pdf về máy thay vì mở nó trên trình duyệt.
Thêm đường link để tải pdf
<%= link_to "PDF", posts_path(format: :pdf) %>
Trên đây mình đã giới thiệu sơ qua về gem wicked_pdf
. Nếu bạn muốn tìm hiểu sâu hơn thì có thể truy cập vào đây. Cảm ơn các bạn đã theo dõi!
All rights reserved