[解決済み] ePub形式の読み込み
質問
ePubファイルを読むためのiPhoneアプリを開発しようとしています。 これを開発するために利用できるフレームワークはありますか? このファイル形式をどのように読み込むのか、まったくわかりません。 NSXML Parser を使用して、拡張子が .epub のサンプルファイルを解析しようとしましたが、失敗しました。
どのように解決するのですか?
EPUB形式は、異なる仕様/形式の束をまとめたものです。
- 本のコンテンツがどのように見えるかを示すもの(XHTML 1.1 + CSSのサブセット)
- コンテンツを構成するすべてのファイルを一覧表示するマニフェストを定義する (OPF、これは XML ファイルです)
- すべてがどのようにパッケージ化されるかを定義する (OEBPS:マニフェスト内のすべてのファイルといくつかの追加ファイルの ZIP ファイル)
この仕様は少し難しく見えますが、実際には基本的なこと (解凍、XML のパース) を押さえておけば、特に難しくも複雑でもありません。
EPUB をダウンロードする方法、どこかで解凍する方法、マニフェストを解析する方法、そして関連するコンテンツを表示する方法を考え出す必要があります。
これから始めようと思っている方へのポインタです。
コンテンツを表示するには
UIWebView
を使うだけです。
以下は、あなたのコードのためのハイレベルなステップバイステップです。
1) ビューを作成し、その中に
UIWebView
2)EPUBファイルをダウンロードする
3) 上記リンク先のzipライブラリを使用して、アプリのドキュメントフォルダのサブディレクトリに解凍します。
4) XML ファイルを次の場所でパースします。
META-INF/container.xml
(このファイルが存在しない場合、EPUBは無効です) 上記リンク先のTBXMLを使用します。
5)このXMLで、メディアタイプの最初のquot;rootfile"を見つける。
application/oebps-package+xml
. これは、本のOPFファイルです。
6) OPFファイルを解析する (XMLでも可)
7) 今度は本の最初の章が何であるかを知る必要があります。
a) それぞれ
<item>
の中に
<manifest>
要素には、idとhrefがあります。これらを
NSDictionary
に格納します。キーはidで、オブジェクトはhrefです。
b) 最初の
<itemref>
の中にある
<spine>
. これは(a)のidのひとつに対応するidref属性を持っています。そのidを
NSDictionary
でそのidを調べると、hrefが表示されます。
c) これは、ユーザーに見せる最初の章のファイルです。フルパスが何であるかを調べます (ヒント: (3) で zip ファイルを解凍した場所と (6) の OPF ファイルのベースディレクトリです)。
8)
NSURL
を使って
fileURLWithPath:
ここで、path は (7c) からのフルパスである。このリクエストを読み込むには
UIWebView
を使って読み込む。
ユーザーがある章から別の章に移動できるように、進む/戻るボタンやスワイプなどを実装する必要があります。そのためには
<spine>
を使用して、次に表示するファイルを決定します。
<itemrefs>
は読者に表示されるべき順番になっています。
関連
-
iOS classic error Undefined symbols for architecture XXX:
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] IBOutletsはARCのもとで強くなるべきか、弱くなるべきか?
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] Swiftの配列を文字列に変換するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
libc++abi.dylib が NSException 型の捕捉できない例外で終了する理由 エラー
-
[解決済み] Xcodeにおけるバージョンとビルドの比較
-
[解決済み] iOS7でスタイルUITableViewStyleGroupedを持つUITableViewの上部に余分なパディングがあるのはなぜですか?
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] UITableViewCell、スワイプ時に削除ボタンを表示させる
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。
-
[解決済み] ぼかしの入ったオーバーレイビューの作成