EPUB作成スクリプトを作る際にハマった事。
EPUBを作る際のZIPアーカイブ。
EPUBの仕様では、アーカイブの先頭に無圧縮のmimetypeを配置すること。
> 7z.exe a -mx1 epub.epub mimetype
> 7z.exe a -mx9 epub.epub OEBPS META-INF
以上のコマンドでアーカイブすると、一応EPUBビューアで見れるが…
チェッカーでチェックすると…
$ epubcheck epub.epub
ERROR(PKG-006): ./epub.epub/epub.epub(-1,-1): mimetypeファイルエントリが存在しないか、アーカイブの先頭以外の場所に存在しています.
のエラー。7zipのコマンドで中身を調べてみると
# 7z.exe l epub.epub
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2019-06-15 11:13:13 D.... 0 0 META-INF
2019-06-15 11:13:13 ....A 244 169 META-INF\container.xml
2019-06-15 11:13:13 ....A 20 20 mimetype
2019-06-15 11:13:13 D.... 0 0 OEBPS
2019-06-15 11:13:13 ....A 7500 1174 OEBPS\content.opf
2019-06-15 11:13:13 D.... 0 0 OEBPS\Images
2019-06-04 13:46:07 ....A 403417 400058 OEBPS\Images\01.jpg
コマンドで最初にアーカイブしても、先頭には来ない。アルファベット順に並んでいる様子。なので、mimetypeのファイル名を00mimetypeで作成。アーカイブ後にリネーム。
> 7z.exe a -mx1 epub.epub 00mimetype
> 7z.exe a -mx9 epub.epub OEBPS META-INF
> 7z.exe rn epub.epub 00mimetype mimetype
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2019-06-15 11:13:13 ....A 20 20 mimetype
2019-06-15 11:13:13 D.... 0 0 META-INF
2019-06-15 11:13:13 ....A 244 169 META-INF\container.xml
2019-06-15 11:13:13 D.... 0 0 OEBPS
2019-06-15 11:13:13 ....A 7500 1131 OEBPS\content.opf
2019-06-15 11:13:13 D.... 0 0 OEBPS\Images
2019-06-04 13:46:07 ....A 403417 398861 OEBPS\Images\01.jpg
これで、チェッカーにかけると
$ epubcheck epub.epub
EPUB version 3.0.1 のルールを使って検証します.
エラーも警告も検出されませんでした.
まぁ、アーカイブしたEPUBをSigilなどのエディタで開いて保存し直せば、このエラーは消えるんですけどね。