L'utilisation Prawn & Prawnto pour Rails génération PDF
-
20-09-2019 - |
Question
Ceci est probablement plus une question de conception ou d'utilisation, mais le principal problème est d'utiliser le plug-in avec Rails Prawn 2.3.4 et accéder à l'objet PDF résultant pour le rendre à un fichier.
Le scénario est essentiellement;
- un contrôleur avec la configuration du bloc respond_to
- une vue avec le code pour rendre le texte, les graphiques, etc au format PDF
Il ressemble à:
De Contrôleur client
def show
@customer = Customer.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @customer }
format.pdf { render :layout => false }
end
De Vue client
pdf.text "Hello World"
pdf.text "Customer is #{@customer.name}"
Cela fonctionne bien, la production d'un fichier PDF en réponse à /customers/1.pdf, comme prévu avec un fichier PDF généré.
L'une des autres exigences est de rendre le pdf dans un fichier et stocker une copie sur le serveur. Prawn fournit la méthode:
pdf.render_file {path_tofile}
Alors maintenant, si j'inclure dans le code Voir je peux bien sûr enregistrer le fichier sur le serveur. Mais je voudrais gérer ce dans le contrôleur, car il est lié à la logique, pas voir en soi.
La première tentative était:
def show
@customer = Customer.find(params[:id])
@pdf = Prawn::Document.new()
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @customer }
format.pdf { render :layout => false }
pdf.render_file {path_to_file}
end
De Vue client
pdf.text "Hello World"
pdf.text "Customer is #{@customer.name}"
PROBLÈME
Le problème avec cette tentative est que le PDF est pas rendu. Je me doutais bien la variable d'instance du contrôleur se heurte à la variable Plugin Prawnto de pdf
. Mais même changer la variable PDF ne fonctionne pas.
Toutes les suggestions?
La solution
Voici comment j'utilise langoustine dans mon application Rails: http://yob.id.au/2009/05/30/prawn-and-x-accel-redirect.html - il n'utilise pas du tout prawnto
.Vous pouvez ignorer les choses X-Accel-Redirect sauf si vous utilisez nginx.
En variante, un autre des développeurs de base de crevettes a mis en place ce guide: