Mit Garnelen & Prawnto für Rails PDF-Generierung
-
20-09-2019 - |
Frage
Dies ist wahrscheinlich ein Design oder Nutzung Frage, aber das Hauptproblem ist, mit der Garnele-Plugin mit Rails 2.3.4 und dem Zugriff auf das resultierende PDF-Objekt in eine Datei zu machen.
Das Szenario ist im Grunde;
- ein Controller mit dem respond_to Block-Setup
- eine Ansicht mit dem Code für die Wiedergabe des Textes, Grafiken usw. zu PDF
Es sieht aus wie:
Vom Kunden-Controller
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
Aus Kundensicht
pdf.text "Hello World"
pdf.text "Customer is #{@customer.name}"
Das funktioniert gut, eine PDF-Datei als Antwort auf /customers/1.pdf produzieren, als mit einer PDF-Datei erwartete erzeugt wird.
Einer der anderen Anforderungen ist die pdf in eine Datei zu machen und eine Kopie speichert auf dem Server. Garnele, sieht das Verfahren:
pdf.render_file {path_tofile}
So, jetzt, wenn ich schließe dies im Code anzeigen ich natürlich auf dem Server speichern Sie die Datei kann. Aber ich möchte dies in der Steuerung verwalten, wie es auf logisch verwandt ist, nicht anzeigen per se.
Der erste Versuch war:
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
Aus Kundensicht
pdf.text "Hello World"
pdf.text "Customer is #{@customer.name}"
PROBLEM
Das Problem bei diesem Versuch ist, dass das PDF nicht wiedergegeben wird. Ich vermutete, dass die Controller-Instanz-Variable mit dem Prawnto Plugin pdf
Variable clashing. Aber auch die Änderung der PDF-Variable nicht funktioniert hat.
Irgendwelche Vorschläge?
Lösung
Dies ist, wie ich Garnele in meiner Rails-Anwendung: http://yob.id.au/2009/05/30/prawn-and-x-accel-redirect.html -. es verwendet nicht prawnto überhaupt
Sie können die X-Accel-Redirect Sachen ignorieren, wenn Sie nginx verwenden.
Alternativ kann eine andere eine der Garnele Kern Devs hat zusammen diese Anleitung: