EPUB 使用指南
EPUB、MOBI 與 AZW3——三種電子書格式的技術差異
EPUB 是目前最廣泛使用的開放電子書格式,但 Amazon 的 Kindle 生態系使用 MOBI 與 AZW3 這兩種專有格式。這三種格式的容器結構完全不同,轉換時需要注意許多技術細節。EPUB Tools 只處理 EPUB 容器,不支援 MOBI 或 AZW3。
EPUB:開放標準的 ZIP 容器
EPUB 由 International Digital Publishing Forum(IDPF)最初制定,現在由 W3C 維護。EPUB 的核心設計是將所有書籍內容包裝在一個 ZIP 容器中,並使用開放標準的 XML 與 XHTML 來描述內容。EPUB 的優點在於它是開放標準,任何廠商都可以免費實作,不需要支付授權費用。目前 EPUB 是除了 Amazon Kindle 之外所有主要閱讀器的標準格式,包括 Kobo、PocketBook、Readmoo、HyRead、Google Play Books 與 Apple Books。
EPUB 的容器結構如前所述:mimetype → META-INF/container.xml → content.opf → manifest → spine。EPUB 2 使用 DTBook 或 NCX 作為目錄格式,EPUB 3 則改用 HTML 的 nav 元素作為導覽目錄,並支援更多的多媒體內容類型。EPUB 3 也引入了 MathML 與更完善的 CSS 支援,讓技術書籍與教科書的排版更精確。
MOBI:Amazon 的早期格式
MOBI 格式源自法國公司 Mobipocket 的設計,Amazon 在 2005 年收購 Mobipocket 後,將其作為 Kindle 的原始格式。MOBI 不是 ZIP 容器,而是使用 Palm 資料庫(PDB)格式做為容器。PDB 格式最初是為 Palm OS 設計的資料庫檔案格式,它的結構完全不同於 ZIP:PDB 檔案包含一個標頭(header)、一個記錄索引(record list)以及多個資料記錄(records)。MOBI 的內容(包括 HTML、圖片)被分割成多個記錄儲存在 PDB 中。
MOBI 格式的限制包括:圖片支援有限(僅 BMP、GIF、JPEG 與 PNG,且必須轉換為 Mobipocket 的特定格式)、字型嵌入不支援、CSS 支援非常有限。MOBI 使用一種名為 PalmDoc 的壓縮方式,與 ZIP 的 Deflate 不同。由於這些限制,MOBI 在現代閱讀器上已經逐漸被取代。
AZW3:Kindle 的現代格式
AZW3(也稱為 Kindle Format 8 或 KF8)是 Amazon 在 2011 年推出的格式,用來取代舊有的 MOBI。AZW3 的容器仍然是 PDB 格式,但內容層級做了大幅改進:支援 HTML5 與 CSS3、支援嵌入字型(WOFF)、支援 SVG 圖片、以及支援更多 metadata 欄位。AZW3 還包含一個向下相容的 MOBI 記錄,讓舊版 Kindle 裝置也可以讀取,但新功能(如 CSS3 樣式)在舊裝置上不會生效。
值得注意的是,AZW3 的容器仍然是 PDB 而非 ZIP,因此 EPUB Tools 無法讀取或處理 AZW3 檔案。如果需要將 AZW3 轉換為 EPUB,需要使用 Calibre 等第三方工具。但轉換過程可能遇到格式資訊遺失的問題,特別是 CSS 定位與版面細節。
格式之間的轉換限制
從 EPUB 轉換為 MOBI 或 AZW3 時,可能遺失以下內容:EPUB 的 CSS 版面設定(特別是 float、position 與多欄版面)、嵌入字型(MOBI 不支援字型嵌入)、MathML 公式(需要轉換為圖片)、以及 JavaScript 互動內容(Kindle 不支援 EPUB 3 的 script 功能)。從 MOBI 或 AZW3 轉換回 EPUB 時,可能遺失原本的目錄結構、metadata 與部分圖片。
EPUB Tools 的設計目標是處理 EPUB 容器的修復與重新封裝,不支援 MOBI 或 AZW3 的讀取或轉換。如果使用者需要在這三種格式之間轉換,建議使用 Calibre 或 Kindle Previewer 等專門工具。EPUB Tools 專注於解決 EPUB 容器層級的問題,確保 EPUB 本身符合 W3C 標準。
為什麼 EPUB Tools 只處理 EPUB
EPUB 的 ZIP 容器結構是開放且文件完整的,可以在瀏覽器環境中直接使用 JavaScript 的 ZIP 函式庫進行讀取與寫入。MOBI 與 AZW3 使用的 PDB 容器格式在瀏覽器環境中沒有成熟的實作方式,而且 Amazon 的格式規格並非完全開放,部分細節需要逆向工程才能得知。因此 EPUB Tools 的範圍限定在 EPUB 容器,以確保工具的可靠性與正確性。
相關指南:EPUB 無法匯入怎麼辦 · EPUB 其實就是 ZIP · EPUB 容器結構解析 · 閱讀器匯入疑難排解
PDB 格式的檔案標頭固定為 78 個位元組,包含資料庫名稱、建立時間、修改時間、版本號碼與記錄數量等欄位。與 ZIP 的 Central Directory 不同,PDB 的記錄索引是一個固定長度的陣列,每個記錄索引佔 8 個位元組,記錄了該記錄在檔案中的偏移量與屬性標記。這意味著 PDB 不支援 ZIP 那種「每個 entry 獨立壓縮」的彈性設計——MOBI 或 AZW3 的內容通常以整塊方式壓縮,無法單獨存取某個章節而不解壓縮整個內容區塊,這也是為什麼在 Kindle 上開啟大型書籍時,翻頁速度往往比同尺寸的 EPUB 慢的原因。
另一個關鍵差異是,PDB 格式沒有內建的 mimetype 機制。ZIP 可以透過 local file header 或 Central Directory 中的 extra field 來儲存檔案類型資訊,但 PDB 的資料庫類型是透過標頭中的 type 與 creator 這兩個四個字元代碼來識別的。對於 MOBI 格式,這兩個代碼分別是 BOOK 與 MOBI;對於 AZW3,則是 BOOK 與 AZW3。這種識別方式遠不如 EPUB 的 mimetype 機制來得直觀與標準化,也是為什麼 PDB 格式在跨平台相容性上不如 ZIP 的原因之一——應用程式必須事先知道每個四字代碼的意義,才能正確識別檔案類型。