EPub formatını okuma


102

EPub dosyalarını okumak için bir iPhone uygulaması geliştirmeye çalışıyorum. Bunu geliştirmek için herhangi bir çerçeve var mı? Bu dosya biçimini nasıl okuyacağım hakkında hiçbir fikrim yok. NSXML Ayrıştırıcı kullanarak .epub uzantılı bir örnek dosyayı ayrıştırmaya çalıştım, ancak bu başarısız oldu.

Yanıtlar:


305

EPUB formatı bir dizi farklı spesifikasyonu / formatı bir araya getirir:

  • kitabın içeriğinin nasıl görünmesi gerektiğini söyleyen biri (XHTML 1.1 + CSS'nin bir alt kümesi)
  • biri bu içeriği oluşturan tüm dosyaları listeleyen bir "bildirim" tanımlamak için (bir XML dosyası olan OPF)
  • her şeyin nasıl paketlendiğini tanımlamak için biri (OEBPS: manifestteki her şeyin bir zip dosyası ve birkaç ekstra dosya)

Spesifikasyonlar biraz ürkütücü görünüyor, ancak aslında temel bilgileri (XML'i açma, ayrıştırma) bir kez öğrendikten sonra, özellikle zor veya karmaşık değil.

EPUB'u nasıl indireceğinizi, bir yere açıp, manifest'i ayrıştırıp ardından ilgili içeriği nasıl görüntüleyeceğinizi öğrenmeniz gerekecek.

Yeni başlıyorsanız bazı ipuçları:

İçeriği görüntülemek UIWebViewiçin şimdilik sadece a kullanın .

İşte kodunuz için yüksek düzeyli bir adım adım:

1) ile bir görünüm oluşturun UIWebView

2) EPUB dosyasını indirin

3) yukarıda bağlantısı verilen zip kitaplığını kullanarak uygulamanızın belgeler klasöründeki bir alt dizine açın

4) XML dosyasını META-INF/container.xml(bu dosya yoksa EPUB geçersizdir), yukarıda bağlantısı verilen TBXML kullanarak ayrıştırın

5) Bu XML'de, ortam türüne sahip ilk "kök dosyasını" bulun application/oebps-package+xml. Bu, kitabın OPF dosyasıdır.

6) OPF dosyasını (ayrıca XML) ayrıştırın

7) şimdi kitabın ilk bölümünün ne olduğunu bilmeniz gerekiyor.

a) her <item>içinde <manifest>elemanının bir kimliğini ve bir href sahiptir. Bunları NSDictionary, anahtarın id ve nesnenin href olduğu bir yerde saklayın.

b) İlk bak <itemref>içinde <spine>. (A) 'daki kimliklerden birine karşılık gelen bir idref niteliğine sahiptir. Bu kimliğe bakın NSDictionaryve bir href alacaksınız.

c) bu, kullanıcıya göstermek için ilk bölümün dosyasıdır. Tam yolun ne olduğunu hesaplayın (ipucu: zip dosyasını (3) içine açtığınız yer artı (6) içindeki OPF dosyasının temel dizini)

8) bir oluşturma NSURLkullanılarak fileURLWithPath:yolu (7c) tam yoludur. Bu isteği UIWebView(1) 'de oluşturduğunuz kullanarak yükleyin .

Kullanıcıların bir bölümden diğerine geçebilmesi için ileri / geri düğmelerini veya kaydırmaları veya başka bir şeyi uygulamanız gerekir. Daha sonra <spine>hangi dosyanın <itemrefs>gösterileceğini bulmak için kullanın - XML'deki, okuyucuya görünmesi gereken sıradadır.


gerçekten iyi bir öğretici ..! havalı adam..! Böyle bir demo için çok zaman harcadım
Paresh Thakor

16
Bu yanıt için yalnızca 1 ek oy sağlamanın mümkün olması çok yazık
Tim McNamara

Mükemmel cevap. Bu bir SSS haline geliyor :)
Nic Gibson

9
Çok teşekkürler Euan ... Hala bir çözüm arayanlar için, bir örnek oluşturdum ve ideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX

ZIP arşivinin paketlenmemiş içeriği olan ayrı yeni dosyalar oluşturmayı kastediyorsanız, "bir yere sıkıştırmaya" gerek olmadığını unutmayın. ZIP oldukça basit bir formattır ve halihazırda bu tür kitaplıklarınız yoksa, arşivdeki çeşitli dosyalar için anında doğrudan arşivden okuyan giriş akışları sağlayan kitaplıklar oluşturmak oldukça kolay olmalıdır. Tam kaynağı bulunan böyle bir kitaplığa bir örnek RubyZip'tir ( rubyzip.sourceforge.net ).
cjs

21

Görünüşe göre EPUB "sadece" bir XML formatıdır, bu yüzden bir xml ayrıştırıcınız ve spesifikasyonunuz varsa uygun olmalıdır.

Artı biraz öğretici ? İyi eğlenceler!

DÜZENLEME: Burada biraz kod da okuyabilirsiniz , bu epub oluşturmak içindir, onları okumak için değil, ancak kod yararlı olabilir.

Tekrar DÜZENLE: Sağ kenar çubuğunda ilgili soruların bağlantılarına bakın, ePub'ı destekleyen ücretsiz e-kitap okuyucunun yanıtlarında bazı bağlantılar var.


DÜZENLEME 3: Sorunuzu düzenlerken bir yorum eklemelisiniz, böylece size cevap veren kişiler tartışmaya devam edebilir (yorum yapmazsanız, düzenlemeniz fark edilmeyecektir).

Bu nedenle, Stack Overflow'da spesifikasyonu veya ilgili soruları okumadığınız için ayrıştırma başarısız olur ... * .epub dosyası, düz xml değil, XML dosyası / dosyaları içeren sıkıştırılmış bir klasördür.


6

Bu öğreticiyi bir kez okudum (ücretsiz kayıt gerekli, üzgünüm) ve bana ePub'a harika bir giriş sağladı. deverloperWorks öğreticisi burada

Bazı XML işleme kitaplıklarına bakmanızı şiddetle tavsiye ederim. Yalnızca XML dosyasından belirli bilgileri almak istiyorsanız, doğru ayrıştırma stratejisini seçebilirsiniz.


Bu eğitim mükemmeldir ve mevcut standart açık kaynak ePub araçlarının çoğunu yazan kişi tarafından yazılmıştır. Hızlı bir okuma ve ePub formatına mükemmel bir çalışma girişi sağlar.
Brian Moeskau


2

İPhone uygulamaları için bir epub çerçevesi oluşturmak için etrafta oynuyorum.

Şu anda (gerçekten yeni başlıyorum) bölümlere bağlantılar içeren bir başlık sayfası oluşturabiliyorum.

Benim yaklaşımım

  • Quickconnect iphone çerçevesini, temelde iphone uygulamaları olarak javascript uygulamalarına izin veren bir katman olarak kullanın (belki telefon aralığına geçebilirim)
  • UNZIPed epub'ı projeye kaynak olarak ekleyin
  • Epub.js'nin özelleştirilmiş bir sürümüyle her şeyi ayrıştırın (google kodunda bir yerde)

Şu anda pageflip, bir tür gui ve küçük kullanılabilirlik sorunları (görüntülenen mevcut sayfayı kaydedin)

Umarım bu sana nasıl başlayacağına dair bir fikir verir


epub.js'yi kullandım, XML Ayrıştırma Hatası olarak bir hata aldım : hiçbir öğe bulunamadı konum satır numarası 1 sütun numarası 1. bazı bağlantılar sağlayarak bana yardımcı olabilir
user969275

çerçeveniz nasıl? bir yerde yayınladın mı?
yasirmturk

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.