Skip to content

proyecto de prueba de como utilizar la gem prawn en rails3x

Notifications You must be signed in to change notification settings

pollcaz/testprawn

Repository files navigation

Prawn en Rails3x

A continuación este proyecto permite saber como utilizar la gema prawn en rails3 ver= 3.2.12
cibergrafia: 
https://github.com/prawnpdf/prawn/wiki/Using-Prawn-in-Rails-3
http://blog.idyllic-software.com/blog/bid/204082/Creating-PDF-using-Prawn-in-Ruby-on-Rails

1-lo primero es instalar la gema de prawn para esto la adicionas a tu Gemfile y posterior ejecutas el comando de instalación de las gemas del proyecto así:

Gemfile gem ‘prawn’

Parado en la raiz de tu proyecto por consola corres este comando $bundle install

2- Cree el siguiente archivo en esta ruta config/initializers/prawn.rb y adicionele la siguiente instrucción require “prawn” #es para las versiones de Prawn 0.9+

3-configuramos el mime type para que nos reconozca el formato :pdf como alias cuando lo invoquemos en cualquier vista y el método en el controller respond_to trabaje correctamente. Esta configuración se la hacemos al archivo que se encuentra en config/initializers/mime_types.rb adicionando la siguiente instrucción: Mime::Type.register_alias “application/pdf”, :pdf

4- cree una carpeta para los documentos pdf de su aplicación dentro app/ para nuestro caso la nombramos reports con el siguiente comando: $ mkdir app/reports

5- Dentro de la carpeta reports cree un archivo order_list.rb el cual contendrá la clase que le permitirá generar su documento pdf, para esto, la clase OrderList será una que herede de la clase Prawn::Document así:

class OrderList < Prawn::Document

#Hay dos formas de hacerlo 1- con el constructor de la clase o  2- con este Método principal que construye el  documento pdf y se invoca con el contructor en el controller

# 1- Método constructor de la clase Orderlist

def initialize(orders, view)
   super()
   logo 
   @ordenes = orders
   @vista = view
   order_details
end

# 2- Método que reemplaza el constructor(initialize se elimina), pero implica que en el controller de la clase se invoque así:
#  output = OrderList.new.to_pdf(@orders,view_context) -> es más larga esta forma.
# y también se debe cambiar el formato quitandole el método render así:
# format.pdf{
#      send_data output, :filename => "orderslist.pdf", :type => "application/pdf", :disposition => "inline"
#    }
def to_pdf(orders, view)
  logo
  @ordenes = orders
  @vista = view
  order_details
  render
end

#Método para definir el logo con su ubicación así como el título del reporte
def logo
  logopath =  "#{Rails.root}/app/assets/images/rails.png"
  image logopath, :width => 50, :height => 64
  move_down 10
  draw_text "Listado de Ordenes", :at => [150, 575], size: 22
  text "Logo"
end

#Método para dar formato a la salida de los registros
def precision(num)
  @vista.number_with_precision(num, :locale => :es ,:precision => 2, :separator => ",", :delimiter => '.')
end

#Método para almacenar y mostrar los registros del detalle de la orden
def order_item_rows
  [["Product", "Quantity", "UnitPrice($)", "Amount($)"]] +
  @ordenes.map do |orden|
    [ "#{orden.product} ", orden.quantity, 
    "#{precision(orden.unitprice)}  ",  
    "#{precision(orden.quantity  * orden.unitprice)}" ]
  end
end

#Método que imprime la tabla de las ordenes que hay
def order_details
  move_down 80
  table order_item_rows, :width => 500 do
    row(0).font_style = :bold
    columns(1..3).align = :right
    self.header = true
    self.column_widths = {0 => 200, 1 => 100, 2 => 100, 3 => 100}
  end
end

end

6- en el controller de la vista donde desea que aparezca la opción para ver y descargar el pdf realice la instaciación de la clase del reporte en formato pdf y enviele los parámetros correspondientes. Para nuestro caso vamos a realizar un listado de todas las ordenes de pedidos y para esto modificaremos la acción Index de orders_controller así:

def index

  @orders = Order.all
  output = OrderList.new(@orders,view_context) # Aquí instancio el documento pdf
  respond_to do |format|
    format.pdf{
      send_data output.render, :filename => "orderslist.pdf", :type => "application/pdf", 
                :disposition => "inline" # este parámetro permite ver el documento pdf en linea.
    }
    format.html #{ render :text => "<h1>Use .pdf</h1>".html_safe }
    format.json { render json: @orders  }
  end

end

7- Adicionamos el link de visualización descarga del listado de ordenes en la vista de ordenes en la acción Index.html.erb así: <%= link_to “Download Order List”, orders_path(:format => :pdf) %>

8- subar el server y pruebe así: $ rails s

ingrese a su browser a la siguiente dir, así deberá encontrar el link de ingreso a su pdf: localhost:3000/orders

Espero que esta guía les sea de gran ayuda, Saludos!.

About

proyecto de prueba de como utilizar la gem prawn en rails3x

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published