Lectura de formato ePub


102

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

Respuestas:


304

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

  • uno para decir cómo debería verse el contenido del libro (un subconjunto de XHTML 1.1 + CSS)
  • uno para definir un "manifiesto" que enumere todos los archivos que componen ese contenido (OPF, que es un archivo XML)
  • uno para definir cómo está empaquetado 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 los conceptos básicos (descomprimir, analizar XML) no es particularmente difícil o complejo.

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

Algunos consejos si recién está comenzando:

Para mostrar contenido, solo use un UIWebViewpor ahora.

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

1) crea una vista con un UIWebView

2) descarga el archivo EPUB

3) descomprímalo en un subdirectorio en la carpeta de documentos de su aplicación usando la biblioteca zip, vinculada arriba

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

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

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

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

a) cada uno <item>en el <manifest>elemento tiene un id y un href. Guárdelos en un lugar NSDictionarydonde la clave sea el id y el objeto sea el href.

b) Mira el primero <itemref>en el <spine>. Tiene un atributo idref que corresponde a uno de los identificadores en (a). Busque esa identificación en el NSDictionaryy obtendrá un href.

c) este es el archivo del primer capítulo que se muestra al usuario. Calcule cuál es la ruta completa (pista: es donde descomprimió el archivo zip en (3) más el directorio base del archivo OPF en (6))

8) crea un NSURLuso fileURLWithPath:, donde la ruta es la ruta completa desde (7c). Cargue esta solicitud con el UIWebViewque creó en (1).

Deberá implementar botones de avance / retroceso o deslizamientos o algo para que los usuarios puedan moverse de un capítulo a otro. Utilice <spine>para averiguar qué archivo mostrar a continuación: <itemrefs>en el XML están en el orden en que deberían aparecer para el lector.


realmente un buen tutorial ..! hombre genial..! He pasado mucho tiempo para tal demostración
Paresh Thakor

16
Es una pena que solo sea posible proporcionar 1 voto a favor para esta respuesta
Tim McNamara

Gran respuesta. Esto se está convirtiendo en una pregunta frecuente :)
Nic Gibson

9
Muchas gracias Euan ... Para todos aquellos que todavía están buscando una solución, he creado una muestra y la he
MobX

Tenga en cuenta que no hay una necesidad particular de "descomprimirlo en algún lugar" si con eso se refiere a la creación de nuevos archivos separados que son el contenido descomprimido del archivo ZIP. ZIP es un formato bastante simple, y debería ser bastante fácil crear bibliotecas que le brinden flujos de entrada para los diversos archivos en el archivo que se leen directamente desde el archivo sobre la marcha, si aún no tiene tales bibliotecas. Un ejemplo de una biblioteca de este tipo, con fuente completa disponible, es RubyZip ( rubyzip.sourceforge.net ).
cjs

21

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 ? ¡Que te diviertas!

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

EDITAR de nuevo: y vea los enlaces a la pregunta relacionada en la barra lateral derecha, hay algunos enlaces en las respuestas al lector de libros electrónicos gratuito que admiten ePub.


EDITAR 3: Debe agregar un comentario cuando edite su pregunta para que las personas que le respondan puedan continuar la discusión (si no comenta, no nos daremos cuenta de su edición).

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


6

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

Le sugiero que consulte 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.


Este tutorial es excelente y está escrito por la persona que creó muchas de las herramientas ePub estándar de código abierto disponibles. Es una lectura rápida y ofrece una introducción perfecta al formato ePub.
Brian Moeskau


2

Estoy jugando para crear un epub-framework para aplicaciones de iPhone.

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

Mi enfoque es

  • Use el marco de iphone de conexión rápida como una capa (tal vez cambie a phonegap) que básicamente permite aplicaciones de javascript como aplicaciones de iphone
  • Agregue el epub descomprimido como un recurso para el proyecto
  • Analice todo con una versión personalizada de epub.js (en algún lugar del código de Google)

En este momento estoy investigando pageflip, algún tipo de interfaz gráfica de usuario y problemas menores de usabilidad (guarde la página actual que se está viendo)

Espero que te dé una idea de cómo empezar


He usado epub.js, lo que obtuve como Error de análisis XML: no se encontró ningún elemento, ubicación, línea, número 1, columna, número 1.Puedes ayudarme proporcionando algunos enlaces
user969275

¿Qué pasa con tu marco? lo has publicado en alguna parte?
yasirmturk

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.