EpubLib, una librería Java para leer Epub

0
12301

0. Índice de contenidos.

1. Introducción

Hoy vamos a ver cómo podemos leer Epub (Electronic Publication) desde Java. Existen algunas librerías para el parseo, la lectura y la generación de Epub, y tras probar algunas, encontramos una que funciona realmente bien y de forma muy sencilla. Se llama EpubLib.

EpubLib es un API de Java desarrollado por Paul Siegmann y que os podéis descargar de su página principalhttp://www.siegmann.nl/. Está licenciado bajo LGPL. Si queréis saber más sobre la licencia podéis consultar los términos en http://www.gnu.org/licenses/lgpl-java.html

2. Entorno

  • Hardware: Portátil MacBook Pro 15′ (2.0 GHz Intel i7, 8GB DDR3 SDRAM, 500GB HDD).
  • AMD Radeon HD 6490M 256 MB
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.7
  • Software: Eclipse Helios, EpubLib 3.0-SNAPSHOT

3. Extrayendo la metainformación de un libro

Para este tutorial vamos a utilizar el epub «Treasure Island» o en español, «La isla del Tesoro». Los epub no son más que un fichero comprimido con extensión .epub, y si los descomprimimos dentro tienen varios ficheros en formato xhtml. De entre ellos, uno de los más importantes es aquel con extensión .opf. En este fichero se especifica la metainformación del libro: Autor, editorial, tema del libro, descripción, etc…

A continuación vamos a ver el contenido del fichero content.opf de nuestro epub Treasure Island. Empieza de la siguiente forma.

 

Para extraer esta información con EpubLib tan solo tendríamos que hacer lo siguiente:

 

Como veis, tan solo me he creado un método setBook (línea 23) en un @BeforeClass para cargar el libro una sola vez. De esta forma estará disponible para todos los métodos de test de esta clase. En este primer test comprobamos que la metainformación se corresponde con lo que tiene el archivo content.opf.

Si os fijáis en la línea 25 estamos usando ClassPathResource, que es una clase de Spring. Si queréis cargar el fichero .epubde esta forma solo tenéis que añadir a vuestro POM la siguiente dependencia.

 

4. Leyendo un Epub

Vamos a meternos dentro del archivo content.opf de nuevo. Esta vez nos vamos a fijar más abajo. Concretamente en los apartados <manifest> y <spine toc=»ncx»>. El contenido es el siguiente:

 

Si os fijáis en la línea 51, tenemos un item con id = W01ZB309. Y en la línea 4, tenemos el archivo al que se está referenciando con ese id, que es 01ZB309.html. Este archivo se corresponde con la posición 1 de <spine toc=»ncx»>, que no es ni más ni menos que «toc» table of contents o tabla de contenidos. Este archivo es por lo tanto el contenido nº 1 de la tabla de contenidos. El 0 sería 000Title.html ya que es lo primero que se mostrará del libro, y los sucesivos se sacan de igual forma. En la línea 45 podemos ver otro archivo que define la tabla de contenidos. Es TOC.html y además de los archivos que representan cada contenido, viene el título que se debería mostrar asociado a dicho archivo.

4.1 Lectura Síncrona

Vamos a ver ahora, como acceder a esta información con EpubLib, con un test muy sencillo, que podemos situar debajo del anterior. Lo que vamos a leer es el contenido precisamente de nuestro recurso 1 de la tabla de contenidos, es decir, el archivo01ZB309.html, que os pongo a continuación:
01ZB309.html

 
TEST

 

En la línea 4 vemos como estamos cogiendo el recurso 1. Leemos en un buffer de tamaño 1000. Esto sería conveniente que fuera una constante, pero para el ambito de este tutorial es suficiente. Cómo podéis observar estamos leyendo los primeros 1000 bytes o caracteres del archivo 01ZB309.html.

Para comprobar que esto es cierto consideramos que es suficiente ver que empiece como lo hace dicho archivo, que contiene una frase que debería estar en dichos 1000 primeros bytes, y comprobar que contiene la última parte de esos 1000 bytes como se hace en la línea 10. En la línea 12 estamos justamente probando que no contiene parte de lo que debiese estar en los siguientes 1000 bytes, eso forma parte del segundo trozo que queremos leer. Leemos el siguiente trozo y basta con comprobar que empieza justo donde se quedó el anterior y que termina con el cerrado del archivo html como se hace en la línea 17. Por último cerramos el reader.

4.2 Lectura Asíncrona

Si lo que pretendemos es leer partes aisladas de un Epub o posicionarnos dentro de un recurso, EpubLib cuenta con una forma sencilla de hacerlo. Lo vamos a ver al intentar obtener la segunda parte del archivo «01ZB309.html». Lo que queremos obtener es justamente el contenido de text2 del test anterior, pero sin tener que leer text1. El posicionamiento se hace de la siguiente forma:
TEST

 

Et voilà!! Es tan sencillo como saltarnos los bytes que no nos interesan con la función skip.

5. Conclusiones

Como habéis podido ver EpubLib es una librería muy sencilla, que entre otras muchas cosas nos permite leer de una forma fácil el contenido de los Epub. Ahora os toca a vosotros experimentar con ella un poquito más. Un saludo y espero que os haya sido útil.

6. Información sobre el autor

Alberto Barranco Ramón es Ingeniero Técnico en Informática de Gestión y Graduado en Ingeniería del Software por la Universidad Politécnica de Madrid

Mail: abarranco@autentia.com.

Twitter: @barrancoalberto

Autentia Real Business Solutions S.L. – «Soporte a Desarrollo».

Dejar respuesta

Please enter your comment!
Please enter your name here