Utilizzando Prawn & Prawnto per Rails generazione di file PDF
-
20-09-2019 - |
Domanda
Questo è probabilmente più un disegno o utilizzo questione, ma il problema principale sta usando il plugin di gamberi con Rails 2.3.4 e accedere all'oggetto PDF risultante a rendere in un file.
Lo scenario è fondamentalmente;
- un controller con la configurazione blocco respond_to
- una vista con il codice per il rendering del testo, la grafica ecc per PDF
Si presenta come:
Dal controllo dei clienti
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
Da Clienti Visualizza
pdf.text "Hello World"
pdf.text "Customer is #{@customer.name}"
Questo funziona bene, producendo un file PDF in risposta a /customers/1.pdf, come previsto con un file PDF generato.
Uno degli altri requisiti è quello di rendere il pdf in un file e archiviare una copia sul server. Prawn fornisce il metodo:
pdf.render_file {path_tofile}
Così ora se abbia inserito questo nel codice View posso, naturalmente, salvare il file sul server. Ma mi piacerebbe gestire questo nel controller, in quanto è legato alla logica, non vista di per sé.
Il primo tentativo è stato:
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
Da Clienti Visualizza
pdf.text "Hello World"
pdf.text "Customer is #{@customer.name}"
PROBLEMA
Il problema con questo tentativo è che il PDF non viene eseguito il rendering. Sospettavo la variabile di istanza Controller è scontrandosi con la variabile pdf
Prawnto Plugin. Ma anche cambiando la variabile PDF non ha funzionato.
Qualche suggerimento?
Soluzione
Questo è il modo che uso nel mio gamberi rotaie app: http://yob.id.au/2009/05/30/prawn-and-x-accel-redirect.html - non usa prawnto a tutti
.È possibile ignorare la roba X-Accel-reindirizzamento a meno di utilizzare nginx.
In alternativa, un altro degli sviluppatori principali gamberi ha messo insieme questa guida: http://wiki.github.com/sandal/prawn/using-prawn-in-rails