1. ホーム
  2. ios

[解決済み] ePub形式の読み込み

2022-11-07 02:59:47

質問

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> は読者に表示されるべき順番になっています。