Poppler: una biblioteca para trabajar con PDFs

Ayer me enteraba a través de la lista de coordinación del FLISoL sobre un software que permite realizar presentaciones en PDF utilizando efectos estilo Keynote.

Este programa, denominado pdfcube, aparentemente utilizaba OpenGL para dibujar la presentación y los efectos de transición, por lo cual me surgió la duda de cómo harían para convertir las páginas del documento en Texturas que pudieran aplicarse sobre objetos 3D.

Según aprendí leyendo el código fuente (el programa es de licenciamiento libre), aparentemente lo que se hace es abrir el documento utilizando una biblioteca que permite extraer información del PDF mismo, en particular, permite renderizar las páginas a un Pixmap, que luego puede ser convertido en una Textura. Esta biblioteca se denomina Poppler (sitio oficial), en honor a unos bichos de la serie de Fox: Futurama.

Investigando un poco más sobre esta biblioteca descubrí que se trata de un fork del proyecto xpdf-3.0 y es la biblioteca de rendering que utilizan varios programas conocidos como Evince, Okular y TeXworks, entre otros.

La biblioteca, que está desarrollada en C, tiene un wrapper sencillo para Python. Les dejo un pequeño snippet para que vean algunas cosas básicas que se puede hacer con ella.

#!/usr/bin/python

import sys
import poppler

def dump_props(fileuri):
	try:
		doc = poppler.document_new_from_file(fileuri, "")
	except Exception, ex:
		print "Error:", ex
		return

	print "Title: %s\nVersion: %s\nAuthor: %s\nCreated using: %s, %s" %\
		(doc.get_properties("title")[0], \
		doc.get_properties("format")[0], \
		doc.get_properties("author")[0], \
		doc.get_properties("producer")[0], \
		doc.get_properties("creator")[0])

if __name__ == "__main__":
	if len(sys.argv) > 1:
		dump_props(sys.argv[1])
	else:
		print "Usage: %s <URI>" % sys.argv[0]
		exit(-1)

La salida para una corrida de prueba sería:

./poppertest.py file:///home/ale/Downloads/GLSLangSpec.4.00.7.pdf

Title: The OpenGL Shading Language
Version: PDF-1.4
Author: John Kessenich
Created using: OpenOffice.org 2.0, Writer

Espero que a alguien le sirva! Happy Poppler-ing!

This entry was posted in Programacion, Python, Tutoriales. Bookmark the permalink.