ePub形式の読み取り


102

ePubファイルを読み取るためのiPhoneアプリケーションを開発しようとしています。これを開発するために利用できるフレームワークはありますか?このファイル形式の読み方がわかりません。NSXMLパーサーを使用して、拡張子が.epubのサンプルファイルを解析しようとしましたが、失敗します。

回答:


304

EPUB形式は、さまざまな仕様/形式をまとめたものです。

  • 本の内容がどのように見えるかを示すもの(XHTML 1.1 + CSSのサブセット)
  • そのコンテンツを構成するすべてのファイルをリストする「マニフェスト」を定義するもの(XMLファイルであるOPF)
  • すべてをどのようにパッケージ化するかを定義するもの(OEBPS:マニフェスト内のすべてのzipファイルといくつかの追加ファイル)

仕様は少し難しいように見えますが、実際には基本(解凍、XMLの解析)を理解すれば、それほど難しくも複雑でもありません。

EPUBをダウンロードし、どこかに解凍し、マニフェストを解析してから、関連するコンテンツを表示する方法を理解する必要があります。

あなたが始めたばかりの場合のいくつかのポインタ:

コンテンツを表示するにはUIWebView、今のところを使用します。

ここにあなたのコードのための高レベルのステップバイステップがあります:

1)でビューを作成する UIWebView

2)EPUBファイルをダウンロードする

3)上記のリンクされたzipライブラリを使用して、アプリのドキュメントフォルダー内のサブディレクトリに解凍します

4)META-INF/container.xml上記のリンクされたTBXMLを使用して、XMLファイルを解析します(このファイルが存在しない場合、EPUBは無効です)。

5)このXMLで、media-typeを含む最初の「ルートファイル」を見つけますapplication/oebps-package+xml。これは本のOPFファイルです。

6)OPFファイル(XML)を解析する

7)次に、本の最初の章が何であるかを知る必要があります。

a)要素のそれぞれ<item><manifest>idとhrefがあります。これらをNSDictionary、キーがIDでオブジェクトがhrefであるに保存します。

b)の最初<itemref>を見てください<spine>。(a)のIDの1つに対応するidref属性があります。でそのIDを検索するNSDictionaryと、hrefが取得されます。

c)これは、ユーザーに表示する最初の章のファイルです。フルパスを確認します(ヒント:(3)でzipファイルを解凍した場所に加えて、(6)でOPFファイルのベースディレクトリ)

8)NSURLusingを作成しますfileURLWithPath:。ここで、パスは(7c)からのフルパスです。UIWebView(1)で作成したを使用してこのリクエストをロードします。

ユーザーが1つの章から別の章に移動できるように、進む/戻るボタンまたはスワイプなどを実装する必要があります。<spine>次に使用するファイルを決定するには、を使用し<itemrefs>ます。XMLでは、リーダーに表示される順序になっています。


本当に良いチュートリアルです。クールな男..!私はそのようなデモに多くの時間を費やしました
Paresh Thakor

16
それは、この答えを1つのupvoteを提供するだけで可能だということは残念だ
ティム・マクナマラ

すばらしい答えです。これはFAQになりつつあります:)
Nic Gibson

9
Euanに感謝します...まだ解決策を探しているすべての人のために、私はサンプルを作成してideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX

ZIPアーカイブの解凍されたコンテンツである別個の新しいファイルを作成することを意味する場合、「どこかに解凍する」必要は特にありません。ZIPは非常に単純な形式であり、アーカイブにさまざまなファイルの入力ストリームを提供するライブラリを簡単に作成できます。このようなライブラリがない場合は、その場でアーカイブから直接読み取ることができます。完全なソースが利用可能なそのようなライブラリの1つの例は、RubyZip(rubyzip.sourceforge.net)です。
cjs 2011年

21

どうやらEPUBは「単なる」XMLフォーマットなので、XMLパーサーと仕様があれば大丈夫です。

プラス少しチュト?楽しんで!

編集:ここでいくつかのコードを読むこともできます。これはepubを生成するためのものであり、それらを読み取るためではありませんが、コードが役立つ場合があります。

再度編集:右側のサイドバーにある関連する質問へのリンクを参照してください。ePubをサポートする無料の電子ブックリーダーへの回答にいくつかのリンクがあります。


編集3:質問を編集するときにコメントを追加して、回答者がディスカッションを続行できるようにする必要があります(コメントしない場合、編集内容は通知されません)。

そのため、Stack Overflowで仕様や関連する質問を読んでいないため、解析は失敗します... * .epubファイルは、プレーンxmlではなく、XMLファイルを含むzipフォルダーです。


6

私はこのチュートリアルを1度読みました(無料の登録が必要です。申し訳ありません)。ePubの素晴らしい紹介をしてくれました。deverloperWorksチュートリアルはこちら

XML処理ライブラリのいくつかをご覧になることを強くお勧めします。XMLファイルから特定の情報を取得するだけの場合は、適切な解析戦略を選択できます。


このチュートリアルは優れており、利用可能な標準のオープンソースePubツールの多くを作成した人が書いています。それはすぐに読むことができ、ePubフォーマットの完全な実用的なイントロを提供します。
Brian Moeskau


2

iPhoneアプリ用のepubフレームワークを作成するためにアラウンドプレイしています。

現時点では(私は本当に初心者です)、章へのリンクを含むタイトルページを生成できます。

私のアプローチは

  • クイックコネクトiphoneフレームワークをレイヤーとして使用します(多分私はphonegapに変更します)。これにより、基本的にJavaScriptアプリをiphoneアプリとして使用できます。
  • UNZIPされたepubをプロジェクトのリソースとして追加します
  • epub.jsのカスタマイズされたバージョン(google-codeのどこか)ですべてを解析します

現在、私はページフリップ、ある種のGUIと小さなユーザビリティの問題(現在表示されているページを保存する)を調べています。

始める方法についてのアイデアをあなたに与えることを願っています


epub.jsを使用しましたが、XML解析エラーとしてエラーが発生しました。ロケーション行番号1の列番号1 の要素が見つかりません。いくつかのリンクを提供することで私を
助ける

あなたのフレームワークはどうですか?あなたはそれをどこかに公開しましたか?
yasirmturk 14

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.