Forum: Rails-ES Tablas en pdf....

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
04419aafce908974edc7554dad715184?d=identicon&s=25 Andres (Guest)
on 2007-01-29 11:46
Hola...

Estoy lanzando un pdf y no se como puedo hacer un bucle de tal forma que
me llene una tabla...este es el codigo q estoy utilizando:

def pdf

    @clientes = Pcliente.find_all

      _pdf = PDF::Writer.new
      _pdf.select_font "Times-Roman"
      _table = PDF::SimpleTable.new
      _pdf.text "CLIENTES" , :font_size => 20, :justification => :center
      @clientes.each do |cliente|
      _pdf.text cliente.Nombre + " - " + cliente.Telefono , :font_size
=> 15, :justification => :left
      _table.data = ["Nombre" => cliente.Nombre, "Telefono" =>
cliente.Telefono]
    end
    _table.column_order = [ "Nombre", "Telefono" ]
    _table.render_on(_pdf)

    send_data _pdf.render, :filename => "clientes.pdf", :type =>
"application/pdf"
  end

El resultado en la tabla es el último registro. ¿como los puedo pintar
todos?
711c9ebc75867d98d013756a90b82a0e?d=identicon&s=25 _maxi __ (mreitz)
on 2007-01-29 17:32
Hola, creo que te falta imprimir los saltos de línea en cada iteración.
Saludos.

Maxi

Andres wrote:
> Hola...
>
> Estoy lanzando un pdf y no se como puedo hacer un bucle de tal forma que
> me llene una tabla...este es el codigo q estoy utilizando:
>
> def pdf
>
>     @clientes = Pcliente.find_all
>
>       _pdf = PDF::Writer.new
>       _pdf.select_font "Times-Roman"
>       _table = PDF::SimpleTable.new
>       _pdf.text "CLIENTES" , :font_size => 20, :justification => :center
>       @clientes.each do |cliente|
>       _pdf.text cliente.Nombre + " - " + cliente.Telefono , :font_size
> => 15, :justification => :left
>       _table.data = ["Nombre" => cliente.Nombre, "Telefono" =>
> cliente.Telefono]
>     end
>     _table.column_order = [ "Nombre", "Telefono" ]
>     _table.render_on(_pdf)
>
>     send_data _pdf.render, :filename => "clientes.pdf", :type =>
> "application/pdf"
>   end
>
> El resultado en la tabla es el último registro. ¿como los puedo pintar
> todos?
Cebc9541fbfe66e8bdb49c0d3713a3aa?d=identicon&s=25 William Fernando (numerouno)
on 2008-08-26 04:36
buenas noches,
tengo el mismo problema:

"Hola, creo que te falta imprimir los saltos de línea en cada iteración"

saben como hago para soloucionarlo?

gracias
49b6123803e4f327144e991daab62f77?d=identicon&s=25 Daniel Rodriguez Troitiño (Guest)
on 2008-08-26 08:32
(Received via mailing list)
2007/1/29 Andres <ruby-forum-incoming@andreas-s.net>:
>      _pdf.select_font "Times-Roman"
>
>    send_data _pdf.render, :filename => "clientes.pdf", :type =>
> "application/pdf"
>  end
>
> El resultado en la tabla es el último registro. ¿como los puedo pintar
> todos?
>

No se de donde has sacado el ejemplo, pero hay que leer la
documentación <http://ruby-pdf.rubyforge.org/pdf-writer/doc/index.html>,
exactamente en
<http://ruby-pdf.rubyforge.org/pdf-writer/doc/class...,
que dice:

data [RW] An array of Hash entries. Each row is a Hash where the keys
are the names of the columns as specified in column_order and the
values are the values of the cell.

Es decir data debe ser algo como:

table.data = [{"col1" => "fila 1 col 1", "col2" => "fila 1 col2"},
{"col1" => "fila 2 col 1", "col2" => "fila 2 col 2"}]

Si te fijas tú estás asignando a data un Array de un solo elemento
(aunque no le pongas las llaves eso es un Hash) con dos columnas, por
eso solo se ve la última fila.

Mi recomendación de código:

def pdf
  clientes = Pcliente.find(:all) # find_all está deprecated

  pdf = PDF::Writer.new # no se porqué utilizas subrayados al principio
    # de las variables, pero queda feo, feo feo
  pdf.select_font "Times-Roman"
  pdf.text "CLIENTES", :font_size => 20, :justification => :center
  table = PDF::SimpleTable.new
  table.data = clientes.map { |c| {"Nombre" => c.nombre, "Teléfono" =>
c.telefono} }
  table.column_order = %w(Nombre Telefono)
  table.render_on(pdf)

  send_data pdf.render, :filename => "clientes.pdf", :type =>
"application/pdf"
end

Suerte.

PD: No lo he comprobado.
80b9be0b3d9c2d5fa3372dff8d457a8e?d=identicon&s=25 Aprendiz_ror Ruby on rails (aprendiz_ror)
on 2008-08-27 17:43
Daniel Rodriguez Troitiño wrote:
> 2007/1/29 Andres <ruby-forum-incoming@andreas-s.net>:
>>      _pdf.select_font "Times-Roman"
>>
>>    send_data _pdf.render, :filename => "clientes.pdf", :type =>
>> "application/pdf"
>>  end
>>
>> El resultado en la tabla es el último registro. ¿como los puedo pintar
>> todos?
>>
>
> No se de donde has sacado el ejemplo, pero hay que leer la
> documentación <http://ruby-pdf.rubyforge.org/pdf-writer/doc/index.html>,
> exactamente en
> <http://ruby-pdf.rubyforge.org/pdf-writer/doc/class...,
> que dice:
>
> data [RW] An array of Hash entries. Each row is a Hash where the keys
> are the names of the columns as specified in column_order and the
> values are the values of the cell.
>
> Es decir data debe ser algo como:
>
> table.data = [{"col1" => "fila 1 col 1", "col2" => "fila 1 col2"},
> {"col1" => "fila 2 col 1", "col2" => "fila 2 col 2"}]
>
> Si te fijas tú estás asignando a data un Array de un solo elemento
> (aunque no le pongas las llaves eso es un Hash) con dos columnas, por
> eso solo se ve la última fila.
Gracias por estos aportes que me han servido mucho.

ahora les pregunto, como hago para agregar una fila mas en la tabla al
final del ciclo:

table.data = clientes.map { |c| {"Nombre" => c.nombre, "Teléfono" =>
 c.telefono} }

ya que el arreglo tiene una columna que debo totalizary debo imprimir al
final, entonces quiero insertar una fila, al hacerlo me borra toda la
tabla y me pone los acumulados.

por favor me ayudan?

gracias


> Mi recomendación de código:
>
> def pdf
>   clientes = Pcliente.find(:all) # find_all está deprecated
>
>   pdf = PDF::Writer.new # no se porqué utilizas subrayados al principio
>     # de las variables, pero queda feo, feo feo
>   pdf.select_font "Times-Roman"
>   pdf.text "CLIENTES", :font_size => 20, :justification => :center
>   table = PDF::SimpleTable.new
>   table.data = clientes.map { |c| {"Nombre" => c.nombre, "Teléfono" =>
> c.telefono} }
>   table.column_order = %w(Nombre Telefono)
>   table.render_on(pdf)
>
>   send_data pdf.render, :filename => "clientes.pdf", :type =>
> "application/pdf"
> end
>
> Suerte.
>
> PD: No lo he comprobado.
49b6123803e4f327144e991daab62f77?d=identicon&s=25 Daniel Rodriguez Troitiño (Guest)
on 2008-08-27 19:12
(Received via mailing list)
2008/8/27 Aprendiz_ror Ruby on rails
<ruby-forum-incoming@andreas-s.net>:
>
> ya que el arreglo tiene una columna que debo totalizary debo imprimir al
> final, entonces quiero insertar una fila, al hacerlo me borra toda la
> tabla y me pone los acumulados.
>
> por favor me ayudan?
>

Vuelvo a ponerte la documentación, que deberías leer:

data **[RW]** An **array** of Hash entries. Each row is a Hash where the
keys
are the names of the columns as specified in column_order and the
values are the values of the cell.

Te he marcado las partes importantes con asteríscos. Lo primero es que
data es de lectura y escritura (RW, Read-Write), por lo que puedes
leerlo, escribirlo, volver a leerlo, volver a escribirlo. Segundo, es
un Array, por lo tanto tiene todos los métodos de un Array, por
ejemplo "<<" <http://apidock.com/ruby/Array/%3C%3C> o "push"
<http://apidock.com/ruby/Array/push>.

Espero que con estas indicaciones seas capaz de solucionar tu problema.

Suerte.
98ee355266e55690050a20fd76ee8c67?d=identicon&s=25 Jose Antonio Parra (pikislabis)
on 2008-08-28 10:42
 ¿Sabría alguien decirme como se inserta un salto de linea con el
PDF::Write? Gracias
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2008-08-28 10:47
(Received via mailing list)
2008/8/28 Jose antonio Parra <ruby-forum-incoming@andreas-s.net>

>  ¿Sabría alguien decirme como se inserta un salto de linea con el
> PDF::Write? Gracias
> --
>

Por favor, no secuestréis hilos. Es un no-no-no desde el principio de
los
tiempos.
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2008-08-28 10:56
(Received via mailing list)
2008/8/27 Aprendiz_ror Ruby on rails <ruby-forum-incoming@andreas-s.net>

> Daniel Rodriguez Troitiño wrote:
>
>
> ahora les pregunto, como hago para agregar una fila mas en la tabla al
> final del ciclo:
>
> table.data = clientes.map { |c| {"Nombre" => c.nombre, "Teléfono" =>
>  c.telefono} }
>

Hola,

en lo posible vamos a evitar situaciones como estas, en la que Daniel ha
tenido que escribir dos emails, e invertido el doble de tiempo, para
solucionar algo que a) estaba en la documentación y b) estaba en el
trozo
concreto de documentación que él te envió en primer lugar. Hay que ser
respetuoso con los que intentan ayudar.
Cebc9541fbfe66e8bdb49c0d3713a3aa?d=identicon&s=25 William Fernando (numerouno)
on 2008-08-29 02:36
Gracias, asi lo solucione

 table.data.push("Factura" => 'Totales', "Valor" => t_subt, "Iva" =>
t_iva, "Total" => t_neto, "Nota" => nota)



Daniel Rodriguez Troitiño wrote:
> 2008/8/27 Aprendiz_ror Ruby on rails
> <ruby-forum-incoming@andreas-s.net>:
>>
>> ya que el arreglo tiene una columna que debo totalizary debo imprimir al
>> final, entonces quiero insertar una fila, al hacerlo me borra toda la
>> tabla y me pone los acumulados.
>>
>> por favor me ayudan?
>>
>
> Vuelvo a ponerte la documentación, que deberías leer:
>
> data **[RW]** An **array** of Hash entries. Each row is a Hash where the
> keys
> are the names of the columns as specified in column_order and the
> values are the values of the cell.
>
> Te he marcado las partes importantes con asteríscos. Lo primero es que
> data es de lectura y escritura (RW, Read-Write), por lo que puedes
> leerlo, escribirlo, volver a leerlo, volver a escribirlo. Segundo, es
> un Array, por lo tanto tiene todos los métodos de un Array, por
> ejemplo "<<" <http://apidock.com/ruby/Array/%3C%3C> o "push"
> <http://apidock.com/ruby/Array/push>.
>
> Espero que con estas indicaciones seas capaz de solucionar tu problema.
>
> Suerte.
Cebc9541fbfe66e8bdb49c0d3713a3aa?d=identicon&s=25 William Fernando (numerouno)
on 2008-08-29 04:10
generar un pdf con table = PDF::SimpleTable.new

es muy demorado, genere una tabla de 7.000 registros y me demoro una
hora, estos mismos registros los genere con:

pdf.text
h.factura.to_s+"\t\t\t"+subtotal.to_s+"\t\t\t"+iva.to_s+"\t\t\t"+total.to_s+"\t\t\t"+nota

el problema es que no se como tabular en columnas la informacion, por
favor me ayudan

gracias
This topic is locked and can not be replied to.