使用 7z 壓縮 epub 電子書

製作 epub 電子書並不是很困難,基本上就是將一些純文字的 xhtml 文件,就類似 html 網頁,再加上圖檔、css 格式檔等,就可以做出很簡單的電子書。

只是在製作的過程,要添加一些文件,記錄有哪些檔案在電子書中,這些不是本文介紹的重點,網路上可以找到一些規範。

 

將這些文件做成 epub 電子書,其實就是用 zip 的格式壓縮即可。反之,只要將副檔名 epub 改名成 zip,就可以很容易解開來看裡面的內容了。

 

雖然用 zip 壓縮即可,但還是有一個規則,就是第一個檔案必須是指定的 mimetype 檔案,而且這個檔案不能壓縮。

 

接著其它的檔案再陸續加入壓縮檔即可。

 

原本,我以為用 7z 如下的命令就可以很簡單做出電子書:

 

7z a -mx0 mybook.epub mimetype

7z a -x!mimetype mybook.epub *

 

第一行就是把 mimetype 加到 mybook.epub 中,而且壓縮率為 0。

第二行就是把其它的檔案也加到 mybook.epub 中,除了 mimetype 之外。

 

以前用 perl 處理時,是直接用 perl 的 zip 壓縮功能,使用以上的流程並沒有問題。

 

現在改用 ruby 處理,因為一時沒去找 zip 壓縮功能,就想說用 7z 來處理,使用 system 直接呼叫外部的 7z 程式。

 

結果 7z 使用上述的流程,竟然無法驗證過關,網路查了半天,許多人也有同樣的情況,似乎是 7z 在壓縮其它檔案時,會重新排列順序,mimetype 就不會是第一位了,因此在驗證時就會出錯了。

 

image

 

在網路上有查到一個方法,就是先把 mimetype 改名成 !mimetype,再依之前的流程處理,似乎這種做法就會讓 !mimetype 保持在第一順位。

 

等全部完成後,再修改壓縮檔案中的名字,把 !mimetype 改回 mimetype 即可。

 

7z 的命令如下:

 

7z a -mx0 mybook.epub !mimetype

7z a -x!!mimetype mybook.epub *

7z rn mybook.epub !mimetype mimetype

 

第三行就是把 !mimetype 改回 mimetype。

 

這樣就可以通過驗證了。

 

image

 

可以猜想,如果 epub 中的檔案原本就有檔名在排序時,會比 !mimetype 還前面,那 mimetype 就要改成檔名會排在最前面的名字,才能讓 mimetype 保持在第一位,只要最後要改回 mimetype 就可以了。

重要度:
文章分類:
電腦標籤:

發表新回應

借我放一下廣告