Wicked_pdf #1 : Installation et mise en bouche
Dans un projet rails plusieurs solutions existent pour générer un PDF (Prawn, Pdfkit, Wicked pdf etc.). Nous allons nous orienter sur la gem "wicked_pdf" en plusieurs billets pour l’aborder au mieux.
Pourquoi wicked_pdf ? Sa mise en place et son utilisation nous semblait la meilleure, on peut générer un PDF dans les vues avec un layout et un style personnalisé comme si on intégrait une vue classique (html/css). Pas besoin de générer ce pdf dans l’action d’un controller (nous préférons placer et gérer le contenu d’un PDF au sein du répertoire views d’un projet plutôt que dans un controller). Nous avions essayé Prawn au préalable pour finalement choisir wicked_pdf.
1 – On importe les gems et on les installe
gem 'wkhtmltopdf-binary'
gem 'wicked_pdf'
bundle install
Vous noterez la présence de la gem wkhtmltopdf-binary : cette gem va installer l’utilitaire wkhtmltopdf pour convertir du HTML en PDF. Vous pouvez très bien installer ce binaire vous même en ligne de commande sur votre machine pour ne pas avoir besoin d’installer cette gem. Si jamais vous optez pour cette option il vous faudra préciser le chemin vers l’executable wkhtmltopdf dans un fichier de votre application (plus d’infos ici).
2 – On ajoute notre Mime::Type
# app/config/mime_types.rb
Mime::Type.register "application/pdf", :pdf
3 – On créé un layout pour notre PDF
Cette étape n’est pas obligatoire mais cela vous évitera de revenir en arrière si vous souhaitez personnaliser le template de votre PDF par la suite.
# app/views/layouts/mon_layout_pdf.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Layout PDF</title>
<meta charset="utf-8" />
</head>
<body>
<div id="header"></div>
<div class="principale">
<%= yield %>
</div>
</body>
</html>
4 – On créer la vue avec la bonne extension (.pdf.erb)
# app/views/mon_objet/show.pdf.erb
<h2>Titre pdf de mon_objet</h2>
<p>Avec le contenu de mon <%= @mon_objet %> </p>
5 – On appelle cette vue et ce layout depuis notre action de controller
Vous remarquez que dans app/views/mon_objet/ vous obtenez un fichier show.html.erb et un fichier show.pdf.erb. Pour dire à notre action de switcher sur la bonne vue, nous allons lui spécifier à l’aide du format (sans oublier de lui préciser de choisir notre layout) :
# app/controllers/mon_objet_controller.rb
def show
respond_to do |format|
format.html { render :show }
format.pdf {
render :pdf => "show", :layout => 'pdf.html'
}
end
end
Bon, on affiche notre PDF ?
Lancer votre navigateur, rendez-vous à l’url qui affiche le show de votre objet en rajoutant l’extension .pdf derrière l’id, par exemple : http://localhost:3000/mon_objet/1.pdf
Et voilà c’est déjà terminé, on vient de créer un PDF en 5 étapes seulement en Rails. Nous aborderons plus en profondeur cette gem et les différentes possibilités (images, style etc.) qui s’offrent à nous dans de prochains billets.
Originally published at Sois-net.