กำลังอ่านรูปแบบ ePub


102

ฉันกำลังพยายามพัฒนาแอปพลิเคชัน iPhone เพื่ออ่านไฟล์ ePub มีกรอบสำหรับพัฒนาสิ่งนี้หรือไม่? ฉันไม่รู้ว่าจะอ่านรูปแบบไฟล์นี้อย่างไร ฉันพยายามแยกวิเคราะห์ไฟล์ตัวอย่างที่มีนามสกุล. epub โดยใช้ NSXML Parser แต่ก็ล้มเหลว

คำตอบ:


305

รูปแบบ EPUB รวบรวมข้อกำหนด / รูปแบบต่างๆไว้ด้วยกัน:

  • หนึ่งเพื่อบอกว่าเนื้อหาของหนังสือควรมีลักษณะอย่างไร (ส่วนย่อยของ XHTML 1.1 + CSS)
  • หนึ่งในการกำหนด "รายการ" ที่แสดงรายการไฟล์ทั้งหมดที่ประกอบเป็นเนื้อหานั้น (OPF ซึ่งเป็นไฟล์ XML)
  • หนึ่งในการกำหนดวิธีการรวมทุกอย่าง (OEBPS: ไฟล์ zip ของทุกสิ่งในรายการบวกไฟล์พิเศษบางไฟล์)

รายละเอียดดูน่ากลัวเล็กน้อย แต่จริงๆแล้วเมื่อคุณมีพื้นฐาน (การคลายซิปแยกวิเคราะห์ XML) แล้วก็ไม่ยากหรือซับซ้อนเป็นพิเศษ

คุณจะต้องค้นหาวิธีดาวน์โหลด EPUB คลายซิปที่ใดที่หนึ่งเพื่อแยกวิเคราะห์ไฟล์ Manifest จากนั้นจึงจะแสดงเนื้อหาที่เกี่ยวข้อง

คำแนะนำบางประการหากคุณเพิ่งเริ่มต้น:

หากต้องการแสดงเนื้อหาเพียงใช้ a UIWebViewสำหรับตอนนี้

นี่คือขั้นตอนระดับสูงสำหรับรหัสของคุณ:

1) สร้างมุมมองด้วยไฟล์ UIWebView

2) ดาวน์โหลดไฟล์ EPUB

3) แตกไฟล์ไปยังไดเร็กทอรีย่อยในโฟลเดอร์เอกสารของแอปโดยใช้ไลบรารี zip ที่ลิงก์ด้านบน

4) แยกวิเคราะห์ไฟล์ XML ที่META-INF/container.xml(หากไม่มีไฟล์นี้แสดงว่า EPUB ไม่ถูกต้อง) โดยใช้ TBXML ที่ลิงก์ด้านบน

5) ใน XML นี้พบครั้งแรก "rootfile" application/oebps-package+xmlกับสื่อชนิด นี่คือไฟล์ OPF สำหรับหนังสือ

6) แยกวิเคราะห์ไฟล์ OPF (รวมถึง XML)

7) ตอนนี้คุณต้องรู้ว่าบทแรกของหนังสือเล่มนี้คืออะไร

ก) แต่ละองค์ประกอบ<item>ใน<manifest>องค์ประกอบมี id และ href จัดเก็บสิ่งเหล่านี้ในNSDictionaryที่ที่คีย์คือ id และอ็อบเจ็กต์คือ href

b) ดูครั้งแรก<itemref>ในไฟล์<spine>. มีแอตทริบิวต์ idref ซึ่งสอดคล้องกับหนึ่งในรหัสใน (a) ค้นหารหัสนั้นในNSDictionaryและคุณจะได้รับ href

c) นี่คือไฟล์ของบทแรกที่แสดงให้ผู้ใช้เห็น คำนวณว่าพา ธ แบบเต็มคืออะไร (คำแนะนำ: ทุกที่ที่คุณคลายซิปไฟล์ zip ไปที่ (3) บวกไดเร็กทอรีฐานของไฟล์ OPF ใน (6))

8) สร้างการNSURLใช้งานโดยfileURLWithPath:ที่พา ธ เป็นเส้นทางแบบเต็มจาก (7c) โหลดคำขอนี้โดยใช้ที่UIWebViewคุณสร้างไว้ใน (1)

คุณจะต้องใช้ปุ่มเดินหน้า / ถอยหลังหรือกวาดนิ้วหรือบางอย่างเพื่อให้ผู้ใช้สามารถย้ายจากบทหนึ่งไปอีกบทหนึ่งได้ ใช้<spine>เพื่อกำหนดไฟล์ที่จะแสดงต่อไป - <itemrefs>ใน XML อยู่ในลำดับที่ควรปรากฏต่อผู้อ่าน


สอนดีจริงๆ .. ! คนเท่ .. ! ฉันใช้เวลามากมายสำหรับการสาธิตดังกล่าว
Paresh Thakor

16
เป็นเรื่องน่าเสียดายที่เป็นไปได้เพียง 1 โหวตสำหรับคำตอบนี้
Tim McNamara

คำตอบที่ดี นี่จะกลายเป็นคำถามที่พบบ่อย :)
Nic Gibson

9
ขอบคุณมาก Euan ... สำหรับทุกคนที่ยังคงค้นหาวิธีแก้ปัญหาฉันได้สร้างตัวอย่างและโพสต์ในideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX

โปรดทราบว่าคุณไม่จำเป็นต้อง "เปิดเครื่องรูดที่ไหนสักแห่ง" หากคุณต้องการสร้างไฟล์ใหม่แยกต่างหากซึ่งเป็นเนื้อหาที่ไม่ได้บรรจุในไฟล์ ZIP ZIP เป็นรูปแบบที่ค่อนข้างเรียบง่ายและควรจะเป็นเรื่องง่ายในการสร้างไลบรารีที่ให้อินพุตสตรีมสำหรับไฟล์ต่างๆในไฟล์เก็บถาวรที่อ่านโดยตรงจากที่เก็บถาวรได้ทันทีหากคุณยังไม่มีไลบรารีดังกล่าว ตัวอย่างหนึ่งของไลบรารีที่มีแหล่งข้อมูลแบบเต็มคือ RubyZip ( rubyzip.sourceforge.net )
cjs

21

เห็นได้ชัดว่า EPUB เป็นรูปแบบ XML "เฉยๆ" ดังนั้นหากคุณมีตัวแยกวิเคราะห์ xml และข้อมูลจำเพาะก็น่าจะโอเค

บวกtuto เล็กน้อย ? มีความสุข!

แก้ไข: คุณสามารถอ่านโค้ดบางส่วนได้ที่นี่ซึ่งมีไว้สำหรับการสร้าง epub ไม่ใช่การอ่าน แต่โค้ดอาจมีประโยชน์

แก้ไขอีกครั้ง: และดูลิงก์ไปยังคำถามที่เกี่ยวข้องในแถบด้านข้างด้านขวามีลิงก์บางส่วนในคำตอบสำหรับโปรแกรมอ่าน ebook ฟรีซึ่งรองรับ ePub


แก้ไข 3: คุณควรเพิ่มความคิดเห็นเมื่อคุณแก้ไขคำถามของคุณเพื่อให้คนที่ตอบคุณสามารถสนทนาต่อได้ (หากคุณไม่แสดงความคิดเห็นเราไม่สังเกตเห็นการแก้ไขของคุณ)

ดังนั้นการแยกวิเคราะห์จึงล้มเหลวเนื่องจากคุณไม่ได้อ่านข้อมูลจำเพาะหรือคำถามที่เกี่ยวข้องในไฟล์ Stack Overflow ... * .epub เป็นโฟลเดอร์ซิปที่มีไฟล์ XML ไม่ใช่ xml ธรรมดา


6

ฉันอ่านบทช่วยสอนนี้หนึ่งครั้ง (ต้องลงทะเบียนฟรีขออภัย) และได้ให้คำแนะนำที่ดีเกี่ยวกับ ePub สอน deverloperWorks ที่นี่

ฉันขอแนะนำให้คุณดูไลบรารีการประมวลผล XML บางส่วน หากคุณต้องการเพียงแค่ได้รับข้อมูลเฉพาะจากไฟล์ XML คุณสามารถเลือกกลยุทธ์การแยกวิเคราะห์ที่เหมาะสมได้


บทช่วยสอนนี้ยอดเยี่ยมและเขียนโดยผู้ที่เขียนเครื่องมือ ePub โอเพนซอร์สมาตรฐานจำนวนมากที่มีให้ เป็นการอ่านอย่างรวดเร็วและให้คำแนะนำการทำงานที่สมบูรณ์แบบสำหรับรูปแบบ ePub
Brian Moeskau


2

ฉันกำลังเล่น arround เพื่อสร้าง epub-framework สำหรับแอพ iphone

ในขณะนี้ (ฉันเพิ่งเริ่มต้นจริงๆ) ฉันสามารถสร้างหน้าชื่อเรื่องพร้อมลิงก์ไปยังบทต่างๆ

แนวทางของฉันคือ

  • ใช้ Quickconnect iphone framework เป็นเลเยอร์ (บางทีฉันอาจเปลี่ยนเป็น phonegap) ซึ่งโดยพื้นฐานแล้วจะช่วยให้แอป javascript เป็นแอป iphone
  • เพิ่ม UNZIPed epub เป็นรีซอร์สให้กับโปรเจ็กต์
  • แยกวิเคราะห์สิ่งทั้งหมดด้วย epub.js เวอร์ชันที่กำหนดเอง (บางแห่งใน google-code)

ตอนนี้ฉันกำลังดู pageflip ปัญหาเกี่ยวกับ gui และความสามารถในการใช้งานเล็กน้อย (บันทึกหน้าที่กำลังดูอยู่)

ฉันหวังว่าจะช่วยให้คุณมีความคิดในการเริ่มต้น


ฉันใช้ epub.js สิ่งที่ฉันได้รับข้อผิดพลาดเป็นข้อผิดพลาดในการแยกวิเคราะห์ XML: ไม่พบองค์ประกอบที่ตั้งบรรทัดหมายเลข 1 คอลัมน์หมายเลข 1 ช่วยฉันด้วยการให้ลิงก์
user969275

เกิดอะไรขึ้นกับกรอบงานของคุณ? คุณเคยเผยแพร่ที่ไหนสักแห่งไหม
yasirmturk

1

Jonathan Wight (schwa) ได้พัฒนาโซลูชัน ObjC สำหรับการแยกวิเคราะห์และแสดงเอกสาร ePub บน iPhone เป็นส่วนหนึ่งของที่เก็บโอเพนซอร์ส TouchCode ของเขา


โปรดให้ลิงค์ของโอเพนซอร์ส TouchCode
Hiren

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.