Định dạng EPUB tập hợp nhiều thông số / định dạng khác nhau:
- một để nói nội dung của cuốn sách sẽ như thế nào (một tập hợp con của XHTML 1.1 + CSS)
- một để xác định một "tệp kê khai" liệt kê tất cả các tệp tạo nên nội dung đó (OPF, là một tệp XML)
- một để xác định cách mọi thứ được đóng gói (OEBPS: một tệp zip của mọi thứ trong tệp kê khai cộng với một vài tệp bổ sung)
Các thông số kỹ thuật có vẻ hơi khó khăn nhưng thực sự khi bạn đã nắm được các kiến thức cơ bản (giải nén, phân tích cú pháp XML) thì nó không quá khó hay phức tạp.
Bạn sẽ cần tìm cách tải xuống EPUB, giải nén nó ở đâu đó, để phân tích cú pháp tệp kê khai và sau đó hiển thị nội dung có liên quan.
Một số gợi ý nếu bạn mới bắt đầu:
Để hiển thị nội dung, chỉ cần sử dụng a UIWebView
.
Đây là từng bước cấp cao cho mã của bạn:
1) tạo chế độ xem với UIWebView
2) tải xuống tệp EPUB
3) giải nén nó vào một thư mục con trong thư mục tài liệu của ứng dụng của bạn bằng cách sử dụng thư viện zip, được liên kết ở trên
4) phân tích cú pháp tệp XML tại META-INF/container.xml
(nếu tệp này không tồn tại thì EPUB không hợp lệ) bằng cách sử dụng TBXML, được liên kết ở trên
5) Trong XML này, hãy tìm "tệp gốc" đầu tiên có kiểu phương tiện application/oebps-package+xml
. Đây là tệp OPF cho cuốn sách.
6) phân tích cú pháp tệp OPF (cũng là XML)
7) Bây giờ bạn cần biết chương đầu tiên của cuốn sách là gì.
a) mỗi phần tử <item>
trong <manifest>
phần tử có một id và một href. Lưu trữ chúng trong một NSDictionary
nơi khóa là id và đối tượng là href.
b) Nhìn vào cái đầu tiên <itemref>
trong <spine>
. Nó có một thuộc tính idref tương ứng với một trong các id trong (a). Tra id đó trong NSDictionary
và bạn sẽ nhận được một href.
c) Đây là tệp của chương đầu tiên để hiển thị cho người dùng. Tìm ra đường dẫn đầy đủ là gì (gợi ý: đó là bất cứ nơi nào bạn giải nén tệp zip trong (3) cộng với thư mục cơ sở của tệp OPF trong (6))
8) tạo một NSURL
using fileURLWithPath:
, trong đó đường dẫn là đường dẫn đầy đủ từ (7c). Tải yêu cầu này bằng cách UIWebView
bạn đã tạo trong (1).
Bạn sẽ cần triển khai các nút chuyển tiếp / lùi hoặc vuốt hoặc một cái gì đó để người dùng có thể chuyển từ chương này sang chương khác. Sử dụng <spine>
để tìm ra tệp nào sẽ hiển thị tiếp theo - <itemrefs>
tệp trong XML theo thứ tự mà chúng sẽ xuất hiện cho người đọc.