El Ferrocarril Contra Los Arboles Muertos2

2,463 views

Published on

Rails es un framework WEB pero a veces no hay más remedio que imprimir, veamos que hay que tener en cuenta cuando enfrentamos este desafío.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,463
On SlideShare
0
From Embeds
0
Number of Embeds
326
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

El Ferrocarril Contra Los Arboles Muertos2

  1. 1. Lleïr Borràs & Fernando Martínez El Ferrocarril contra Los Árboles Muertos
  2. 2. ¿Quiénes? Lleïr Borràs Metje Fernando Martínez de la Cueva Web: Web: lleirborras.blogspot.com www.sic-sl.com/fmc twitter: twitter: @lleirborras @oinak Github: LinkedIn: github.com/lleirborras www.linkedin.com/in/fernandomc Trabajo: Trabajo: www.hesperides.cat www.lciberica.es y www.sic-sl.com Producto: www.lciberica.es/productos/psp
  3. 3. «Rails es un Framework web... No lo decimos nosotros sino ellos
  4. 4. ...en un mundo de papel» Nuestra vida esta rodeada de objetos hechos de papel o relacionados con él y es muy difícil dejarlo atrás de golpe:  Libros  Títulos de propiedad  Contratos  Periódico  Lista de la compra...
  5. 5. Definamos aplicación: [La cultura del árbol muerto]
  6. 6. ¿Por qué? «You can't grep dead trees... ... but you can read them in WC bed»       Los árboles muertos llegan donde aún no llegan las pantallas. Esto puede que mejore en el futuro a medio plazo con la tinta electrónica, o iniciatvas como Google Editions, el Crunchpad, los nuevos dispositivos Android...
  7. 7. Odiosas comparaciones... Tamaño / formato predecible Tamaño variable Alta resolución ~300ppp Baja resolución ~72ppp Márgenes imprescindibles Márgenes opinables Predominantemente vertical Vista ¿horizontal?
  8. 8. ¿To PDF or not To PDF? . . . . . . that's the question ¿ ?
  9. 9. ¿Que tener en cuenta? Rapidez/facilidad (subjetiva) de desarrollo Facilidad (subjetiva) de modificar, mantener Rendimiento en máquina (aprox.) Precisión de la salida (respecto a esperado/modelo) Soporte de Parciales Soporte de Imágenes Control de rupturas (Saltos de Página) Soporte/control de tipografías Posibilidad de validación Compatibilidad con versiones Rails Compatibilidad con navegadores
  10. 10. HTMLDoc Gem Web: http://www.htmldoc.org Gem: http://htmldoc.rubyforge.org ✔ HTML (plantillas existentes, mantenimiento) ✘ No soporta HTML > 3.2 (maquetación, validación) ✘ Paginación poco ortodoxa (tags especiales) ✘ Ejecutable aparte (rendimiento, deploy) ✘ Licencia doble (uso comercial*) * IANAL: No somos abogados
  11. 11. RTeX versiones 1 y 2 Web: http://rtex.rubyforge.org/ Versión 1 (Rails 1.x.x) Versión 2 (Rails >= 2.0.1) ✘ Sin partials ✔ Con partials ✘ Sin soporte IDE (¿alguien?) ✘ Sin soporte IDE (¿alguien?) ✘ Congelado (pero opensource) ✔ Activo ✔ Maquetación ortotipográfica ✔ Estilo uniforme ✘ Lenguaje/dominio nuevo (maquetador web) ✘ Posicionamiento difícil de precisar (recortable) ✘ Problemas con las imágenes (PNG, JPEG y GIF) ✘ Ejecutable externo (deploy de extensiones de LaTeX...) ✘ LaTeX pensado para lo contrario (diseño vs contenido)
  12. 12. Jasper Reports Web: http://jasperforge.org/projects/jasperreports Rails: wiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports   ✔Diseño por IDE (propio o plugin Eclipse/NetBeans)   ✔Posicionamiento/maquetación (muy) preciso ✘ Lenguaje/dominio nuevo ✘ Requiere Java ✘ Funcionalidad limitada (cuando/como lo probamos) ✘ No se puede testear la vista
  13. 13. Prawn & PrawnTo Web: http://prawn.majesticseacreature.com/ Rails: http://www.cracklabs.com/prawnto   ✘ Lenguaje/dominio nuevo   ✘ Ruby (maquetador)   ✔ Ruby (desarrollador)   ✔ MVC (ahem ahem sí...)   ✘ MVC (...pero no plantilla)   ✘ Pesado(servidores x2)   ✔ Preciso (el MÁS) ¡hasta recortables! 
  14. 14. $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..','lib')) require 'prawn' Prawn::Document.generate("bounding_boxes.pdf") do bounding_box [100,600], :width => 200 do move_down 10 text "The rain in spain falls mainly on the plains " * 5 move_down 20 stroke do line bounds.top_left, bounds.top_right line bounds.bottom_left, bounds.bottom_right end end bounding_box [100,cursor], :width => 200, :height => 200 do stroke do circle_at [100,100], :radius => 100 line bounds.top_left, bounds.bottom_right line bounds.top_right, bounds.bottom_left end bounding_box [50,150], :width => 100, :height => 100 do stroke_bounds end end end
  15. 15. Acts as flying saucer Java: https://xhtmlrenderer.dev.java.net/ Rails: http://github.com/dagi3d/acts_as_flying_saucer/ ✘ Requiere Java (rendimiento, deploy) ✔ Requiere Java (en entornos ruby) ✔ Plantillas XHTML Correcto (nativas de rails) ✘ Maquetación (limitado por CSS / Navegadores) ✔ Soporte partials, imágenes... ✔ Plantillas XHTML+CSS (maquetadores)
  16. 16. /app/controllers/ejemplo_controller.rb acts_as_fying_saucer def metodo #lógica del controlador respond_to do |format| format.pdf do render_pdf :template => 'ejemplo/metodo', :send_file => { :filename => 'metodo.pdf' } end end end /app/views/ejemplo/metodo.haml    !!!XML !!!strict %html{html_attrs('es-es')} %head %title= @documento.datos[:titulo] ...
  17. 17. (Lleïr's) Render as PDF PHP: http://html2pdf.fr Rails: http://github.com/lleirborras/render_as_pdf ☹ Necesita PHP (>=4) en la máquina ☹ Consume mucha RAM en pdf's grandes (>250 pg.) ☹ Algunos tags especiales (<page_header>, <page_footer>, ...) ☺ Admite HTML 4.01 + CSS 2 ☺ Cabeceras y pies de página dinámicos. ☺ Admite muchos formatos de imágen (jpg, png, gif, ...) ☺ Admite códigos de barras ☺ Plantillas y helpers ☺ MUY rápido de maquetar (HTML)
  18. 18. /app/controllers/ejemplo_controller.rb def metodo respond_to do |format| format.html format.pdf do pdf_data = render_as_pdf :template => "/ejemplo/metodo.html.haml", :layout => false send_data pdf_data, { :type => "application/pdf", :filename => "nombre.pdf" } end end end /app/views/ejemplo/metodo.haml    !!!XML !!!strict %html{html_attrs('es-es')} %head %title= @documento.datos[:titulo] ...
  19. 19. (Oinak's) Fly without the saucer ☑ No requiere Java/PHP/Plugins... (rendimiento, deploy)   ☑ Plantillas XHTML Válido (nativas de rails)   ☑ helpers, partials, reutilización...   ☑ maquetadores web    ☒ Renderizado: (limitados por CSS/soporte browsers)   ☒ en.wikipedia.org/wiki/Comparison_of_layout_engines_(Cascading_Style_Sheets)    ☑ Un modelo no AR (lib/módulo) con todos los datos (hash)   ☑ testeos unitarios (thin controller)    ☑ eficiencia (sin procesos extra)   ☑ mantenimiento (por ejemplo: haml + sass)
  20. 20. /lib/impresos/ejemplo.rb module Impresos class Ejemplo attr_accessor :datos def initializer(*params)... #recaba el hash :datos def render_options()... #decide la plantilla /app/controllers/ejemplo_controller.rb def documento if @documento = Impresos::Ejemplo.new(params) render @documento.render_options else render(:nothing => true,:status => 404) end end /app/views/ejemplo/modelo/variante/documento.haml    !!!XML !!!strict %html{html_attrs('es-es')} %head %title= @documento.datos[:titulo] ...
  21. 21. (Lleïr's version) wicked_pdf wkhtmltopdf: http://code.google.com/p/wkhtmltopdf/ Rails: http://github.com/lleirborras/wicked_pdf ☹ Necesita wkhtmltopdf (webkit) ☺ En la web de wkhtmltopdf ya hay versiones compiladas para GNU/Linux, Mac Os y windows ☺ No require PHP, Java, ... ☺ Plantillas y helpers ☺ MUY rápido de maquetar (HTML, haml, ...) ☺ Admite Javascript ☺ MUY rápido en hacer el render ☺ Soporta para algunos tags de CSS3
  22. 22. $ script/plugin install git://github.com/lleirborras/wicked_pdf.git $ script/generate wicked_pdf /config/initializers/wicked_pdf.rb WICKED_PDF = { :exe_path => '/usr/local/bin/wkhtmltopdf', :layout => 'pdf.html' } /app/controllers/ejemplo_controller.rb def show respond_to do |format| format.pdf do render :pdf => "name", :show_as_html => !params[:debug].blank? end end end /app/views/ejemplo/show.pdf.erb    <h1>Hola en pdf!</h1>
  23. 23. /app/views/layouts/pdf.html.erb <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <%= stylesheet_link_tag "pdf" -%> <%= stylesheet_link_tag "#{RAILS_ROOT}/public/stylesheets/pdf" -%> </head> <body> <div id="content"> <%= yield %> </div> </body> </html> http://localhost:3000/ejemplo/X.pdf?debug=1
  24. 24. En el tintero... • PrinceXML: (http://www.princexml.com/) o Licencia de pago o Márgenes, paginación complicados • ¿Público... ?
  25. 25. ¿Preguntas?
  26. 26. Créditos (mantener al final) Licencia del contenido: Creative Commons blabla Ilustraciones: • [3] Old books: http://commons.wikimedia.org • [5] TUX-WC: Andrés Abad http://andresabad.wordpress.com • [6] 49 hand-drawing: Aleksandra Wolska http://iconfinder.net

×