Leitura do formato ePub

102

Estou tentando desenvolver um aplicativo para iPhone para ler arquivos ePub. Existe alguma estrutura disponível para desenvolver isso? Não tenho ideia de como ler este formato de arquivo. Tentei analisar um arquivo de amostra com extensão .epub usando o NSXML Parser, mas falhou.

MobX
fonte

Respostas:

304

O formato EPUB reúne um monte de especificações / formatos diferentes:

  • um para dizer como o conteúdo do livro deve ser parecido (um subconjunto de XHTML 1.1 + CSS)
  • um para definir um "manifesto" que lista todos os arquivos que compõem esse conteúdo (OPF, que é um arquivo XML)
  • um para definir como tudo é empacotado (OEBPS: um arquivo zip de tudo no manifesto mais alguns arquivos extras)

As especificações parecem um pouco assustadoras, mas, na verdade, uma vez que você tenha o básico (descompactar, analisar XML), não é particularmente difícil ou complexo.

Você precisará descobrir como fazer o download do EPUB, descompactá-lo em algum lugar, analisar o manifesto e, em seguida, exibir o conteúdo relevante.

Algumas dicas se você está apenas começando:

Para exibir o conteúdo, basta usar um UIWebViewpor enquanto.

Aqui está um passo a passo de alto nível para o seu código:

1) criar uma visualização com um UIWebView

2) baixar o arquivo EPUB

3) descompacte-o em um subdiretório na pasta de documentos do seu aplicativo usando a biblioteca zip, com link acima

4) analise o arquivo XML em META-INF/container.xml(se este arquivo não existir, o EPUB é inválido) usando TBXML, vinculado acima

5) Neste XML, encontre o primeiro "rootfile" com tipo de mídia application/oebps-package+xml. Este é o arquivo OPF do livro.

6) analise o arquivo OPF (também XML)

7) agora você precisa saber qual é o primeiro capítulo do livro.

a) cada um <item>no <manifest>elemento possui um id e um href. Armazene-os em um local NSDictionaryonde a chave seja o id e o objeto seja o href.

b) Olhe para o primeiro <itemref>no <spine>. Ele tem um atributo idref que corresponde a um dos ids em (a). Procure esse id no NSDictionarye você obterá um href.

c) este é o arquivo do primeiro capítulo a ser mostrado ao usuário. Descubra qual é o caminho completo (dica: é onde quer que você descompactou o arquivo zip em (3) mais o diretório base do arquivo OPF em (6))

8) crie um NSURLusing fileURLWithPath:, onde o caminho é o caminho completo de (7c). Carregue esta solicitação usando o que UIWebViewvocê criou em (1).

Você precisará implementar botões de avançar / retroceder ou deslizar ou algo assim para que os usuários possam mover de um capítulo para outro. Use <spine>para descobrir qual arquivo mostrar a seguir - <itemrefs>no XML estão na ordem em que devem aparecer para o leitor.

Euan
fonte
realmente um bom tutorial ..! homem legal..! Eu gastei muito tempo para essa demonstração
Paresh Thakor
16
é uma pena que só seja possível fornecer 1 voto positivo para esta resposta
Tim McNamara
Ótima resposta. Isso está se tornando um FAQ :)
Nic Gibson
9
Muito obrigado Euan ... Para todos aqueles que ainda estão procurando por uma solução, criei uma amostra e postei em ideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX
Observe que não há necessidade particular de "descompactá-lo em algum lugar" se com isso você quer dizer criar novos arquivos separados que são o conteúdo descompactado do arquivo ZIP. ZIP é um formato bastante simples e deve ser bastante fácil criar bibliotecas que forneçam fluxos de entrada para os vários arquivos no arquivo que são lidos diretamente do arquivo na hora, se você ainda não tiver essas bibliotecas. Um exemplo de tal biblioteca, com fonte completa disponível, é RubyZip ( rubyzip.sourceforge.net ).
cjs
21

Aparentemente, o EPUB é "apenas" um formato XML, portanto, se você tiver um analisador xml e a especificação, não haverá problema.

Mais um pouco de tuto ? Diverta-se!

EDIT: você também pode ler algum código aqui , isso é para gerar epub, não lê-los, mas o código pode ser útil.

EDITAR novamente: E veja os links para perguntas relacionadas na barra lateral direita, existem alguns links nas respostas para o leitor de e-book gratuito que suporta ePub.


EDIT 3: Você deve adicionar um comentário ao editar sua pergunta para que as pessoas que responderem possam continuar a discussão (se você não comentar, não notamos sua edição).

Portanto, a análise falha porque você não leu as especificações ou questões relacionadas no Stack Overflow ... * .epub file é uma pasta compactada que contém arquivo (s) XML, não xml simples.

p4bl0
fonte
6

Li este tutorial uma vez (é necessário registro gratuito, desculpe) e ele me deu uma ótima introdução ao ePub. Tutorial do deverloperWorks aqui

Eu sugiro que você olhe para algumas das bibliotecas de processamento XML. Se você deseja apenas obter informações específicas do arquivo XML, pode escolher a estratégia de análise correta.

Yonkeltron
fonte
Este tutorial é excelente e foi escrito pela pessoa que criou muitas das ferramentas ePub de software livre padrão disponíveis. É uma leitura rápida e oferece uma introdução perfeita ao formato ePub.
Brian Moeskau,
3

há um fbreader de projeto de código aberto,

também suporta iphone

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

camino
fonte
ou há também futurepress / epub.js (lê epub e anotação por meio de um
browner da
2

Estou brincando para criar uma estrutura epub para aplicativos de iphone.

No momento (estou apenas começando), posso gerar uma página de título com links para os capítulos.

Minha abordagem é

  • Use o framework quickconnect iphone como uma camada (talvez eu mude para phonegap) que basicamente permite aplicativos javascript como aplicativos iphone
  • Adicione o epub UNZIPed como um recurso para o projeto
  • Analise tudo com uma versão personalizada do epub.js (em algum lugar do google-code)

No momento estou olhando para o pageflip, algum tipo de interface gráfica e pequenos problemas de usabilidade (salve a página atual que está sendo visualizada)

Espero que tenha dado uma ideia de como começar


fonte
Eu usei o epub.js e recebi um erro como Erro de análise XML: nenhum elemento encontrado localização linha número1 coluna número 1. Você pode me
ajudar
o que está acontecendo com sua estrutura? você publicou em algum lugar?
yasirmturk
1

Jonathan Wight (schwa) desenvolveu uma solução ObjC para analisar e exibir documentos ePub no iPhone. É parte de seu repositório de código aberto TouchCode.

Dwight Kelly
fonte
por favor me dê o link do código aberto TouchCode
Hiren