2011-09-03 8 views
15

Fellas, estoy tratando de dominar la gema pdf de gambas.Rieles, gamba - PDF aparece en el navegador & etc

Ok, estoy lejos del master lvl. Pude hacer que generara un pdf. Cada joya en el Gemfile incluye:

gem 'mysql', '~> 2.8.1' 
gem 'prawn', '~> 0.12.0' 
gem 'pdf-reader', '~> 0.10.0' 
gem 'Ascii85', '~> 1.0.1' 

En el config/application.rb:

config.autoload_paths << "#{Rails.root}/app/reports" 

que en el controlador:

require 'prawn' 

def index 
    pdf = Prawn::Document.new 
    pdf.text "Hello World" 
    pdf.render_file "x.pdf" 
end 

De lo que llamo la función de índice. Un PDF llamado x.pdf se crea en la raíz de mi aplicación. Entre el gemfile, rakefile y config.ru.

Pregunta:

  1. ¿Cómo puedo forzar la gamba para generar el archivo en la aplicación/informe (o cualquier otro seleccionado) carpeta?
  2. ¿Cómo puedo hacer que la acción genere el archivo en la ventana del navegador y no lo guarde?
  3. ¿Cómo puedo hacer para guardar y mostrar en la ventana del navegador?

Suyo, Kael

Respuesta

30

¿Cómo puedo forzar la gamba para generar el archivo en la aplicación/informe (o cualquier otra carpeta seleccionada)?

def index 
    pdf = Prawn::Document.new 
    pdf.text "Hello World" 
    pdf.render_file File.join(Rails.root, "app/report", "x.pdf") 
end 

¿Cómo puedo hacer que la acción genere el archivo en la ventana del navegador y no lo guarde?

def index 
    pdf = Prawn::Document.new 
    pdf.text "Hello World" 
    send_data pdf.render, :filename => "x.pdf", :type => "application/pdf" 
end 

¿Cómo puedo hacer para ahorrar y se muestran en la ventana del navegador?

def index 
    pdf = Prawn::Document.new 
    pdf.text "Hello World" 
    filename = File.join(Rails.root, "app/report", "x.pdf") 
    pdf.render_file filename 
    send_file filename, :filename => "x.pdf", :type => "application/pdf" 
end 
+1

Hola, para mí no va a guardar en esa carpeta. pero va allí para encontrar que es que el pdf está allí o no? cualquier solución para almacenar pdf en una carpeta pública? – SSR

+3

en send_data, debe agregar la opción: disposition => 'inline' – sissy

0

Prueba esto:

def index 
    pdf = Prawn::Document.new 
    pdf.text "Hello World" 
    send_data pdf.render, :filename => "x.pdf", :type => "application/pdf" 
end 

Dicho esto, para nada más que un PDF trivial es probable que desee para generar fuera del controlador en alguna parte.

15

Pregunta de respuesta 3: "¿Cómo puedo hacer para guardar y aparecer en la ventana del navegador?"

def index 
    pdf = Prawn::Document.new 
    pdf.text "Hello World" 
    send_data pdf.render, filename: "x.pdf", type: "application/pdf", disposition: 'inline' 
end 

disposition: 'inline' forzará al navegador (si puede) para mostrar su PDF dentro de la ventana del navegador actual

+3

+1 for ': disposition => 'inline'' – BryanH

Cuestiones relacionadas