Membaca format ePub


102

Saya mencoba mengembangkan aplikasi iPhone untuk membaca file ePub. Apakah ada kerangka kerja yang tersedia untuk mengembangkan ini? Saya tidak tahu cara membaca format file ini. Saya mencoba mengurai file contoh dengan ekstensi .epub menggunakan NSXML Parser, tetapi gagal.

Jawaban:


304

Format EPUB menyatukan banyak spesifikasi / format yang berbeda:

  • satu untuk mengatakan seperti apa konten buku itu seharusnya (bagian dari XHTML 1.1 + CSS)
  • satu untuk mendefinisikan "manifest" yang mencantumkan semua file yang membentuk konten itu (OPF, yang merupakan file XML)
  • satu untuk menentukan bagaimana semuanya dikemas (OEBPS: file zip dari semua yang ada di manifes ditambah beberapa file tambahan)

Spesifikasi terlihat agak menakutkan tetapi sebenarnya setelah Anda memiliki dasar-dasarnya (membuka ritsleting, mengurai XML), itu tidak terlalu sulit atau rumit.

Anda harus mengetahui cara mengunduh EPUB, mengekstraknya di suatu tempat, mengurai manifes, dan kemudian menampilkan konten yang relevan.

Beberapa petunjuk jika Anda baru memulai:

Untuk menampilkan konten, gunakan a UIWebViewuntuk saat ini.

Berikut langkah demi langkah tingkat tinggi untuk kode Anda:

1) buat tampilan dengan a UIWebView

2) unduh file EPUB

3) unzip ke subdirektori di folder dokumen aplikasi Anda menggunakan pustaka zip, ditautkan di atas

4) parsing file XML di META-INF/container.xml(jika file ini tidak ada, EPUB tidak valid) menggunakan TBXML, ditautkan di atas

5) Dalam XML ini, temukan "rootfile" pertama dengan tipe media application/oebps-package+xml. Ini adalah file OPF untuk buku tersebut.

6) parsing file OPF (juga XML)

7) sekarang Anda perlu tahu apa bab pertama dari buku itu.

a) masing-masing <item>di <manifest>elemen memiliki id dan href. Simpan ini di NSDictionarytempat kuncinya adalah id dan objeknya adalah href.

b) Lihat yang pertama <itemref>di <spine>. Ini memiliki atribut idref yang sesuai dengan salah satu id di (a). Cari id itu di NSDictionarydan Anda akan mendapatkan href.

c) ini adalah file dari bab pertama yang akan ditampilkan kepada pengguna. Cari tahu apa jalur lengkapnya (petunjuk: di mana pun Anda membuka ritsleting file zip ke dalam (3) ditambah direktori dasar dari file OPF di (6))

8) buat NSURLpenggunaan fileURLWithPath:, di mana jalurnya adalah jalur lengkap dari (7c). Muat permintaan ini menggunakan yang UIWebViewAnda buat di (1).

Anda harus menerapkan tombol maju / mundur atau gesekan atau sesuatu sehingga pengguna dapat berpindah dari satu bab ke bab lainnya. Gunakan <spine>untuk menentukan file mana yang akan diperlihatkan berikutnya - <itemrefs>dalam XML berada dalam urutan yang seharusnya ditampilkan kepada pembaca.


benar-benar tutorial yang bagus ..! pria keren..! Saya telah menghabiskan banyak waktu untuk demo semacam itu
Paresh Thakor

16
sayang sekali bahwa hanya mungkin memberikan 1 suara positif untuk jawaban ini
Tim McNamara

Jawaban yang bagus. Ini menjadi FAQ :)
Nic Gibson

9
Terima kasih banyak Euan ... Untuk semua yang masih mencari solusi, saya telah membuat sampel dan diposting di ideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX

Perhatikan bahwa tidak ada kebutuhan khusus "untuk mengekstraknya di suatu tempat" jika yang Anda maksud adalah membuat file baru terpisah yang merupakan konten arsip ZIP yang telah dibongkar. ZIP adalah format yang cukup sederhana, dan seharusnya cukup mudah untuk membuat pustaka yang memberi Anda aliran input untuk berbagai file dalam arsip yang dibaca langsung dari arsip dengan cepat, jika Anda belum memiliki pustaka semacam itu. Salah satu contoh pustaka semacam itu, dengan sumber lengkap tersedia, adalah RubyZip ( rubyzip.sourceforge.net ).
cjs

21

Rupanya EPUB adalah "hanya" format XML, jadi jika Anda memiliki parser xml dan speknya seharusnya tidak masalah.

Ditambah sedikit tuto ? Selamat bersenang-senang!

EDIT: Anda juga bisa membaca beberapa kode di sini , ini untuk menghasilkan epub, bukan membacanya tetapi kode tersebut mungkin berguna.

EDIT lagi: Dan lihat link ke pertanyaan terkait di sidebar kanan, ada beberapa link di jawaban pembaca ebook gratis yang mendukung ePub.


EDIT 3: Anda harus menambahkan komentar ketika Anda mengedit pertanyaan Anda sehingga orang yang menjawab Anda dapat melanjutkan diskusi (jika Anda tidak berkomentar, kami tidak memperhatikan hasil edit Anda).

Jadi, penguraian gagal karena Anda tidak membaca spesifikasi atau pertanyaan terkait di Stack Overflow ... *. Fileepub adalah folder zip yang berisi file XML, bukan xml biasa.


6

Saya membaca tutorial ini sekali (diperlukan pendaftaran gratis, maaf) dan itu memberi saya pengenalan yang bagus tentang ePub. deverloperWorks tutorial di sini

Saya sangat menyarankan Anda melihat beberapa perpustakaan pemrosesan XML. Jika Anda hanya ingin mendapatkan informasi spesifik dari file XML, Anda dapat memilih strategi penguraian yang tepat.


Tutorial ini sangat bagus dan ditulis oleh orang yang menulis banyak alat ePub open source standar yang tersedia. Ini adalah bacaan cepat dan memberikan pengantar yang berfungsi sempurna untuk format ePub.
Brian Moeskau


2

Saya sedang bermain-main untuk membuat kerangka kerja epub untuk aplikasi iphone.

Saat ini (saya benar-benar baru saja memulai) saya dapat membuat halaman judul dengan tautan ke bab-bab tersebut.

Pendekatan saya adalah

  • Gunakan kerangka kerja iphone quickconnect sebagai lapisan (mungkin saya ubah ke phonegap) yang pada dasarnya memungkinkan untuk aplikasi javascript sebagai aplikasi iphone
  • Tambahkan epub UNZIP sebagai sumber ressource ke proyek
  • Parsing semuanya dengan versi epub.js yang disesuaikan (di suatu tempat di google-code)

Saat ini saya sedang mempelajari pageflip, beberapa jenis masalah gui dan kegunaan kecil (simpan halaman yang sedang dilihat)

Saya harap itu memberi Anda gambaran tentang cara memulai


saya telah menggunakan epub.js apa yang saya dapatkan kesalahan sebagai XML Parsing Error: tidak ada elemen yang ditemukan baris lokasi nomor1 kolom nomor 1. dapatkah Anda membantu saya dengan memberikan beberapa tautan
user969275

ada apa dengan kerangka Anda? sudahkah kamu mempublikasikannya di suatu tempat?
yasirmturk

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.