Lectura del formato ePub


Estoy tratando de desarrollar una aplicación para iPhone para leer archivos ePub. ¿Hay algún marco disponible para desarrollar esto? No tengo idea de cómo leer este formato de archivo. Traté de analizar un archivo de muestra con .extensión epub usando NSXML Parser, pero eso falla.

 99
Author: Bill the Lizard, 2009-09-07

6 answers

El formato EPUB reúne un montón de especificaciones / formatos diferentes:

  • uno para decir cómo debería ser el contenido del libro (un subconjunto de XHTML 1.1 + CSS)
  • uno para definir un "manifiesto" que enumera todos los archivos que componen ese contenido (OPF, que es un archivo XML)
  • uno para definir cómo se empaqueta todo (OEBPS: un archivo zip de todo en el manifiesto más algunos archivos adicionales)

Las especificaciones parecen un poco desalentadoras, pero en realidad, una vez que tienes lo básico (descomprimir, analizar XML) no es particularmente difícil o complejo.

Tendrá que averiguar cómo descargar el EPUB, descomprimirlo en algún lugar, analizar el manifiesto y luego mostrar el contenido relevante.

Algunos consejos si estás empezando:

Para mostrar contenido solo use un UIWebView por ahora.

Aquí hay un alto nivel paso a paso para su código:

1) crear una vista con un UIWebView

2) descargue el archivo EPUB

3) descomprímelo en un subdirectorio en la carpeta documentos de tu aplicación usando la biblioteca zip, enlazada arriba

4) analizar el archivo XML en META-INF/container.xml (si este archivo no existe, el EPUB no es válido) usando TBXML, enlazado arriba

5) En este XML, busque el primer "rootfile" con media-type application/oebps-package+xml. Este es el archivo OPF para el libro.

6) analizar el archivo OPF (también XML)

7) ahora necesitas saber cuál es el primer capítulo del libro.

A) cada <item> en el elemento <manifest> tiene un id y un href. Almacene estos en un NSDictionary donde la clave es el id y el objeto es el href.

B) Mira el primer <itemref> en el <spine>. Tiene un atributo idref que corresponde a uno de los id de (a). Busca ese id en el NSDictionary y obtendrás un href.

C) este es el archivo del primer capítulo para mostrar al usuario. Averigua qué la ruta completa es (sugerencia: es donde se descomprimió el archivo zip en (3) más el directorio base del archivo OPF en (6))

8) cree un NSURL usando fileURLWithPath:, donde la ruta es la ruta completa desde (7c). Cargue esta solicitud usando el UIWebView que creó en (1).

Necesitarás implementar botones hacia adelante / atrás o deslizar o algo así para que los usuarios puedan moverse de un capítulo a otro. Utilice el <spine> para averiguar qué archivo mostrar a continuación-el <itemrefs> en el XML están en el orden deben aparecer al lector.

 297
Author: Euan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-28 01:28:44

Aparentemente EPUB es "solo" un formato XML, por lo que si tiene un analizador xml y la especificación debería estar bien.

Más un poco de tuto? ¡Diviértete!

EDITAR: también puede leer algún código aquí, esto es para generar epub, no leerlos, pero el código puede ser útil.

EDITE de nuevo: Y vea enlaces a preguntas relacionadas en la barra lateral derecha, hay algunos enlaces en las respuestas a free ebook reader que admiten ePub.


EDITAR 3: Usted debe agregar un comentario cuando edite su pregunta para que las personas que le contesten puedan continuar la discusión (si no comenta, no se notará su edición).

Por lo tanto, el análisis falla porque no leyó la especificación o las preguntas relacionadas en el Desbordamiento de la pila... *.el archivo epub es una carpeta comprimida que contiene archivos XML, no xml simple.

 21
Author: p4bl0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-07 18:11:12

Leí este tutorial una vez (se requiere registro gratuito, lo siento) y me dio una gran introducción a ePub. deverloperWorks tutorial aquí

Le sugiero que mire algunas de las bibliotecas de procesamiento XML. Si solo desea obtener información específica del archivo XML, puede elegir la estrategia de análisis correcta.

 6
Author: yonkeltron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-07 18:32:23

Hay un proyecto de código abierto fbreader,

También es compatible con iphone

Http://www.fbreader.org/about.php

 3
Author: camino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-09 09:49:42

Estoy jugando para crear un marco epub para aplicaciones de Iphone.

En este momento (realmente acabo de empezar) puedo generar una página de título con enlaces a los capítulos.

Mi enfoque es

  • Utilice quickconnect iphone framework como una capa (tal vez cambie a phonegap) que básicamente permite javascript aplicaciones como aplicaciones de iphone
  • Agregue el epub descomprimido como un recurso al proyecto
  • Analice todo con una versión personalizada del epub.js (en algún lugar en google-code)

Ahora mismo estoy buscando en pageflip, algún tipo de gui y problemas de usabilidad menores (guarde la página actual vista)

Espero que os deis una idea de cómo empezar

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-20 10:07:30

Jonathan Wight (schwa) ha desarrollado una solución ObjC para analizar y mostrar documentos ePub en el iPhone. Es parte de su repositorio de código abierto TouchCode.

 1
Author: Dwight Kelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-29 15:36:04