スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

iPhoneオライリー本アプリをkindlegenするときにエラー

[ガジェット]たった600円でオライリー本をiPadやKindleで読む。すてき。- このブログは証明できない。

を真似してkindle用ファイルを作ってみたら、少しはまったのでメモ。

購入したのは Programming PHP(エクステンションの作り方が知りたかった)。

まず、
> Payloadというフォルダの中にappファイルがあります。
は、Windowsだと "(アプリ名).app" フォルダだった。

また、kindelgen を実行すると、
Error(prcgen): TOC section scope is not included in the parent chapter:BCMath Arbitrary Precision Mathematics ("BCMath~"というのは書籍内に含まれる章の名前)
というエラーが発生した。

エラーメッセージでググッたところ
http://www.mobipocket.com/forum/viewtopic.php?p=49267&sid=494a2df12b48a1e8fdca8ae0e7bfb752
がヒット。どうも、「toc.ncx」と「content.opfのspine要素」の整合性が取れていないためらしい。

toc.ncxの該当部分は
        <navPoint id="id2424422" playOrder="1004">
<navLabel>
<text>B.1. Optional Extensions Listing</text>
</navLabel>
<content src="apb.html#progphp2-APP-B-SECT-1"/>
<navPoint id="id2424885" playOrder="1005">
<navLabel>
<text>BCMath Arbitrary Precision Mathematics</text>
</navLabel>
<content src="re514.html"/>
</navPoint>

となっているが、id2424422とid2424885の両方ともspineに含まれていない。
(id2424422はアンカー指定となっているためかmanifest要素にさえ含まれていない。apb.html自体はさらに親のid2424369として含まれている)

試行錯誤の結果わかったのは、navPointに含まれるidは親も子もspineの中に記述されていないと駄目らしいということ。

・content.opf の spine にid2424885(子)を追加。
・toc.ncxのid2424422(親)のIDをid2424369(apb.htmlのID)に書き換え。

でコンパイルを通りmobiファイルが生成された。
kindle for PCで動作を確認したところ、本文は正しく表示された。ただ、目次のほうはkindle for PC に機能自体がないのでうまく動いているかどうか不明。

余談:epubファイルを作成するとき、本来はmimetypeを一番初めに無圧縮で格納しないといけないのだが、そこは適当でもkindlegenは大丈夫だった。
スポンサーサイト

コメント

非公開コメント

プロフィール

fchiba

Author:fchiba
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。