viernes, 16 de diciembre de 2011

Scribus Generator: Mail Merge con Scribus

Según mi traducción de la definición que se publica en la web de Servicios de Información Tecnológica de la Universidad de Indiana, un mail merge es un método para obtener información de una base de datos, hoja de cálculo, u otro origen con información estructurada, e insertarla en documentos tales como cartas, etiquetas, etc. Usualmente se requieren dos archivos, uno que almacene la información variable que se utilizará y el otro que contenga el formateo de esta información variable y el resto de la información que se mantendrá idéntica en todos los resultados del proceso.
No es, ni más ni menos, que la tarea que se hace habitualmente desde un procesador de textos para personalizar, por ejemplo, cartas.

Scribus Generator es un script, escrito en Phyton por Ekkehard Will, que permite hacer esto mismo, pero desde Scribus.

Veamos un ejemplo ficticio, desde cero y paso a paso, que hace uso de esta característica.
Supongamos que lo que necesitamos es hacer e imprimir unos certificados con lo que vamos a agradecer a varios ilustres integrantes de la comunidad de software libre por sus aportes a la misma. Por lo tanto, los diplomas deberán tener, cada uno, datos personalizados.




 El procedimiento podría constar de cuatro etapas:
  1. Hacer el diseño básico del diploma o certificado en Inkscape.
  2. Guardar en un archivo de Calc (u otra hoja de cálculo) la información variable para la personalización.
  3. En Scribus, importar el archivos creado en la etapa 1, agregarle los textos fijos y los campos variables. Correr el script en cuestión y generar tantos PDFs como filas tenga el archivo guardado en la etapa 2.
  4. Unir todos los PDFs en uno solo con, por ejemplo, PDFChain.

Hacer el diseño básico con Inkscape

  1. Abrir Inkscape. Ir a Archivo / Importar desde Open Clip Art Library... En los criterios de búsqueda escribir "Frames" y elegir el resultado más apropiado. Atención: antes de realizar este paso, conviene ver si el sitio Open Clip Art Library está funcionando, ya que días atrás, estuvo más veces caído que funcionando. Si intentan hacer este paso con el sitio caído, Inkscape da error y se cierra.
    Para este ejemplo, elegí Frames Set III (obra de Meister).


  1. De esta manera se obtienen 6 posibles marcos para el certificado en cuestión. Luego, hay que elegir uno de los seis marcos, rotarlo 90 grados, definir el documento de Inkscape en formato A4 horizontal y centrar el marco elegido en la página (y, posiblemente, ajustarle el tamaño):


  1. A continuación hay que agregar algunos elementos gráficos para completar el diseño (los textos se colocarán posteriormente en Scribus). En este caso, agregué el logo del blog y le di color al marco, entre otros detalles, y guardé el archivo:

Guardar la información variable en un archivo de Calc

  1. En esta segunda parte hay que crear el contenido variable. O sea, los textos personalizados.
    Para ello, hay que abrir LibreOffice Calc y generar un documento con, por ejemplo, tres columnas, con los títulos (en la primera fila): nombre, motivo y motivo-ing. Después, en cada fila hay que escribir el nombre del "destinatario" del diploma y el motivo por el que lo recibiría (en la segunda columna en español y en la tercera, en inglés).
  2. Esta es una lista muy parcial de los datos que podría tener ese archivo:
    nombremotivomotivo-ing
    Franz Schmidel programa ScribusScribus software
    Peter Linnellel programa ScribusScribus software
    Paul Johnsonel programa ScribusScribus software
    Craig Bradneyel programa ScribusScribus software
    Petr Vanekel programa ScribusScribus software
    Riku Leinoel programa ScribusScribus software
    Craig Ringerel programa ScribusScribus software
    Andreas Voxel programa ScribusScribus software
    Jean Ghaliel programa ScribusScribus software
    Ekkehard Willel proyecto Scribus GeneratorScribus Generator project
    superpiwiel blog Ubuntu LifeUbuntu Life blog
    Joaquín Herrera Goásel sitio web Joaclint IstgudJoaclint Istgud web site
    Alexandre Prokoudineel sitio web Libre Graphics WorldLibre Garphics World web site
    Jesús David Navarrola Bitácora de jEsuSdAjEsuSdA's blog
    heathenxlos videotutoriales de screencasters.heathenx.orgscreencasters.heathenx.org videotutorials
    Richard Querinlos videotutoriales de screencasters.heathenx.orgscreencasters.heathenx.org videotutorials
    Guillermo Espertino (Gez)el blog OHWebOHWeb blog
    Ariel Corgatellila revista TuxInfoTuxInfo magazine
    Jorge Cacho Hernándezla revista TuxInfoTuxInfo magazine
    Ronnie Tuckerla revista Full CircleFull Circle magazine
    Diego Samuelel sitio web Cuaderno de Novato en DebianCuaderno de Novato en Debian web site
    Fernando da Rosael blog Fernando da Rosa MorenaFernando da Rosa Morena's blog
    ginger coonsla revista Libre GraphicsLibre Graphics Magazine
    Ana Carvalhola revista Libre GraphicsLibre Graphics Magazine
    Ricardo Lafuentela revista Libre GraphicsLibre Graphics Magazine
    Markusel sitio web graphics@linuxgraphics@linux web site
    novatillaskuel sitio web novatillasku.comnovatillasku.com web site
  3. Al archivo lo guardé en formato CSV.

Ahora sí, le toca el turno a Scribus

  1. Llegado este punto, estamos en la parte central de esta entrada. Hay que abrir Scribus y crear un documento de tamaño A4 apaisado.
    Luego, ir a Archivo / Importar / Get vector file... y buscar y seleccionar el archivo creado con Inkscape en el paso 1.
    A continuación redimensionarlo y centrarlo en la página:
  1. Luego, se ingresan los textos "fijos". En este caso utilicé la fuente PT Sans.
    El texto podría ser:
    entrega el presente diploma a...
    por su contribución a la Comunidad del Software Libre con...
    Dado que el diploma sería bilingüe, también va el mismo texto, en inglés:
    awards this diploma to...
    for contribution to the Free Software Community with...

  1. Para ingresar los campos variables (en este caso el nombre y el motivo del "reconocimiento") se debe escribir el título de cada una de las columnas de archivo CSV, creado en el paso 2 de este tutorial ("nombre", "motivo" y "motivo-ing"), entre "%VAR_" y "%".
    Se debe escribir en el tipo de letra, con el color y el tamaño que se quiera que tenga el resultado final (en el ejemplo utilicé la fuente Lobster 1.4 para el nombre). El archivo de Scribus listo para correr el script, se vería así:

  1. Con el archivo CVS con los datos (creado en el paso 2) y el diploma listo para recibirlos, sólo queda descargar el script y descomprimirlo. Para ejecutarlo, desde el archivo de Scribus, hay que ir a Script / Ejecutar script...
    Y en la ventana que se abre, buscar y seleccionar el script recién descomprimido (ScribusGenerator.py).
    Se abre la ventana del Scribus Generator y en ella hay que indicar el camino hacia el archivo de datos (CVS), hacia el propio achivo de Scribus y un directorio donde se guardarán los PDFs resultantes.

  1. Al pinchar el botón Generate, el script crea tantos PDFs como filas de datos haya en el archivo CVS (en este ejemplo, 28). Cada PDF queda de una página con el diploma de correspondiente a una de las personas listadas en el archivo CVS.

Para terminar, se unen todos los PDFs en un archivo único

  1. Este último paso es por comodidad y prolijidad, y consiste en unir todos los PDFs en un PDF único. Para ello debemos instalar pdftk y pdfchain. (*) Luego de tener estos dos programas instalados, hay que abrir el pdfchain, y añadir los PDFs a unir:

  1. Al pinchar en Guardar, pide un nombre para el nuevo PDF y lo genera.
    Una limitación del programa es que soporta hasta 26 archivos simultáneos, así que la unión de todos los diplomas (eran 28) tuve que hacerla en dos etapas.
Al terminar todo el proceso, obtuve un archivo PDF de 28 páginas y algo más de 17 Mb de peso, que quien quiera puede descargar de mi cuenta de UbuntuOne Copy.com.
¡En una de esas, alguno de los "homenajeados" pasa por aquí y se imprime su propio diploma!

(*) ACTUALIZACIÓN: Para esta última parte del tutorial, pdf shuffler parece ser una mejor opción, ya que no tiene la limitación de cantidad de archivos (o si la tiene, es mucho más alta que los 26 que soporta pdfchain).

[ ACTUALIZACIÓN del 29 de julio de 2015 ]
El usuario berteh2be publicó un video (en inglés) explicando el uso de este Script, pero agregando el uso de más variables, de forma de modificar los colores, posiciones, imágenes, tipografías, etc. Realmente muy interesante, aquí lo tienen:


7 comentarios:

  1. Me quito el sombrero maestro, por la calidad y la claridad en la explicación falta un diploma para usted. Y de paso me apunto dos nombres más que no conocía en la lista :P

    Un saludo!

    ResponderBorrar
  2. Mardigann:

    Los "diplomas" son para los que van iluminándonos el camino.
    Por mi parte, me siento sólo como un espejito para reflejar y aumentar esa luz.
    Gracias por el comentario.

    ResponderBorrar
  3. Muchas gracias!! no encontraba una solución similar para Scribus

    ResponderBorrar
  4. Muchas gracias, es justo lo que andaba buscando ahora con el fin de curso...

    ResponderBorrar
  5. Me interesa al revés. pasar la información metida en el formulario scribus a una base de datos. a Excel o firebird etc. alguna base de datos compatible.

    ResponderBorrar
  6. Just wanted to let you know this script has been updated with more interesting features and is now available from github: https://github.com/berteh/ScribusGenerator/

    ... and it can be used with data from databases as well, as long as they can export to csv. some examples (mysql, postgresql, sqlite..) at https://github.com/berteh/ScribusGenerator/#database-source

    ResponderBorrar
  7. También podría hacerse solo con InkScape y Mustache

    ResponderBorrar

Lo que escriba a continuación será revisado antes de publicarse.
Gracias por tus comentarios.