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?

War es hilfreich?

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:

scroll top