‘2012/08’ カテゴリーのアーカイブ

固定レイアウト/リフロー混在EPUB3を作ってみた

2012/08/21

 先日のJEPAのセミナーでもEPUB3の固定レイアウトについての話が出ていましたが、koboも発売になり、Readiumも出たことでEPUB3のリファレンス環境もほぼ整ってきた感がありますので、このあたりを参考に技術習得も兼ねてEPUB3のサンプルづくりをしてみました。
 今回はEPUB3固定レイアウト(EPUB3 Fixed Layout)にチャレンジです。とは言っても私の会社で作るようなコンテンツでは、全ページを雑誌的な固定レイアウトで制作するニーズはあまり無さそうですので、今回はカバーとタイトルおよび1ページ大の画像ページ「だけ」を固定レイアウト指定してみました。以下、おおざっぱな制作フローです。EPUB制作の参考にしていただければ幸いです。なにぶんまだ手さぐりもいいところですので、各箇所に間違った記述もあるかも知れませんがご容赦ください。と言いますかむしろツッコミお願いいたします。

1 InDesignからXMLを書き出し、XHTMLに変換

 今回のサンプルは青空文庫にもラインナップされている、宮武外骨「一円本流行の害毒と其裏面談」です。なかなかぶっとんだ内容で愉快です。詳しい内容の紹介は文末で。XHTML版もあったのですが、タグの付け直し作業が面倒そうだったのと、それを使うと練習にならないので、テキストファイル版を入手してInDesignのドキュメントに流し込み、こちらの手順でEPUB3用XHTMLデータを作成しました※1

2 FuseeβにXHTMLデータを流し込んでとりあえずパッケージ化

固定レイアウトEPUB3として書き出す

固定レイアウトEPUB3として書き出す

 作成したXHTMLデータおよび画像類をFuseeβに取り込み、EPUB3パッケージを書き出します。CSS(カスケーディングスタイルシート)等の設定は必要ですが、細かいパラメータは後から確認しながら追い込んだ方が効率が良いので、ここではとりあえずCSSのファイル登録、画像の登録、XHTMLデータ内へのCSSのリンクの登録などの形をおおざっぱに整え、パッケージとして書き出してしまいます。固定レイアウトもFuseeβからの書き出し時に指定できるのですが、これは全ページを固定レイアウトのEPUBとするための指定なので、特定ページだけを固定レイアウトにするためには後工程でソースの書き換えが必要になります。今回はひとまず、kobo用に縦800px、横600pxの全ページ固定レイアウトEPUB3ファイルとして書き出しました。

3 拡張子をEPUB→ZIPに変更してパッケージを解凍

 作成したファイルの拡張子をEPUB→ZIPに変更し、パッケージを一度解凍します。これにより、XHTMLなど各ファイルの修正、CSSの記述・修正が行えるようになります。

4 リフローページのXHTMLの修正

リフローページのviewport指定を削除

リフローページのviewport指定を削除

 OEBPS/text内にあるXHTMLファイルの中で、リフロー表示させるXHTMLファイルをテキストエディタで開き、ヘッダ部分の「<meta name="viewport"〜」の行を削除します(Fuseeが自動挿入する固定レイアウト用viewport指定です)。

5 content.opfの修正

content.opfを修正(1)

content.opfを修正(1)

 パッケージファイル「content.opf」をテキストエディタで開き、<meta propery="rendition:layout">pre-pagenated</meta>の行の「pre-pagenated」「reflowable」(ドキュメント基本特性を固定レイアウト→リフロー)に、<meta propery="rendition:orientation">auto</meta>の行の「auto」「portrait」(デバイスの向きを縦向きで指定)に修正しました。これらはFuseeが自動挿入する固定レイアウト指定プロパティですが、今回は特定ページのみ固定レイアウト指定しますので、修正しています。

content.opfを修正(2)

content.opfを修正(2)

 さらに、固定レイアウトを指定するXHTMLのspine指定に「properties=<rendition:layout〜」の部分を追記します。詳しいパラメータ等についてはこちらを参考にしました。この修正により、指定ページのみが固定レイアウトに設定されます。

6 CSSの記述・修正

 CSSの調整を行います。今回は固定レイアウト/リフロー混在のドキュメントですので、CSSファイルもそれぞれ別ファイルに分けています。CSSの設定に関しては、フリーで入手できる各種EPUBドキュメントや、公式サンプルドキュメントを参考にしました。固定レイアウトのCSS指定方法に関しては、こちらのサンプルドキュメントを参考にしています。今回、カバーページはSVGの固定レイアウト、タイトルページは固定レイアウトを用いてテキストブロックを左右中央に表示、1ページ大の画像ページは同じく固定レイアウトを用いて左右中央に画像を表示させることとしました。
 なお、CSS調整時の簡易画面確認は、XHTMLファイルをSafariChrome等のブラウザに放り込んで行っています。

7 カバーページにSVGデータをコピー&ペースト

SVGデータをコピー&ペースト

SVGデータをコピー&ペースト

 カバーページは全てSVGを用いた固定レイアウトページですので、Illustratorを用いて作成したカバー画像データをSVG形式で保存し、テキストエディタで開いて<svg>〜</svg>の部分をコピーし、カバー用のXHTMLファイルの<section>〜</section>の部分にペーストします。なお、Illustrator側でも指定ピクセル数サイズのファイルとして画像を作成しておく必要があります。
 SVGを用いた固定レイアウト指定の方法としてこの他に

1 opfファイル内でXHTMLファイルではなくSVG画像ファイルを直接指定する
2 通常の画像同様にEPUBパッケージ内のSVGファイルを指定する

 といったような方法もあるようなのですが、1はこの方法で作ったEPUB3ファイルを開こうとした際に、EPUBビューア「Murasaki」が強制終了してしまい、どうもまだ対応しているビューアが少ないようだとの話もありましたので断念しました。2はおそらく無難にやるならこちらの方がベターでしょう。少なくとも今回のようにカバー画像を普通に表示させたいだけであれば、わざわざXHTMLデータ内にソースとしてSVGを記述する必要性はありません(そもそもSVGである必要もないでしょう)。
 ただ、XHTMLデータ内に画像のデータをテキストとして記述できると言うことは、javascript等を用いて動的にパラメータを書き換えられるということを意味しますので、使い方次第では面白そうです。

8 EPUB再圧縮、kobo/Readiumで確認

Readiumでコンテンツを確認

Readiumでコンテンツを確認

 ひととおりの編集作業が済んだら、展開したドキュメントを再圧縮します。EPUB用の圧縮ではmimetypeファイルの圧縮率を0%にしなければならないのでちょっとだけ面倒です。今回私はこのあたりの情報や、EPUB 3 スタンダード・デザインガイドの情報を参考にMac OS X付属のターミナルで圧縮しました(スクリプト作りましたよ、ええ)。上記参考ページで紹介されている「ePub Packager」などの導入を考えてみても良いと思います。
 圧縮したEPUB3データをkobo/Readiumで表示確認し(koboでの確認時にはファイル名の拡張子を.epub→.kepub.epubに変えることでACCESSの日本語用レンダリングエンジンで確認できます)、おかしな箇所があれば元ファイルを修正して再圧縮を繰り返し、完成させます。
 なお、テスト途中でkoboの挙動がおかしくなったら、一度ファイルを捨てて空の状態で再認識させた上で再度ファイルをコピーすれば直ることが多いです。それでもダメな場合やそもそも画面がフリーズして帰ってこない場合は裏面の穴にクリップの先端を突っ込んでリセットしましょう。
 また、まだβ版ですので対応していないフィーチャーなどがあり、エラーが出ますが、IDPFのEPUB Varidatorもファイルチェックの役に立ちます。

 最後に今回のサンプル、宮武外骨「一円本流行の害毒と其裏面談」についてちょっとだけ。「円本」とは、大正年間末、関東大震災後に販売が始まった廉価な予約販売全集本のことで、一冊の価格が1円、これはそれ以前の本に比べて大幅に安価な値付けだったようです。いささかブームになりすぎた感のあったこの「円本」に対して、出版人としての立場から宮武外骨がもの申しているのがこのドキュメントになります。この外骨先生、自ら役所に掛け合って本名を「外骨」にしたという逸話のある相当にアクの強い人物だったらしく、特に官僚や政治家に対して幾度となく権力批判を行って投獄発禁処分を繰り返した反骨のジャーナリストです。この「一円本流行の害毒と其裏面談」でもそのアクの強さは如何なく発揮され、著者、版元、読者とほぼ全方向に向けてケンカを売りまくっています。この人が近くにいたら私はきっと近づかないようにするでしょう。いや、冗談じゃないです(笑)。

 電子書籍に関連して「本の価格」が話題にのぼることも多い昨今ですので、こうしたものに目を通してみるのも面白いのではないかと思い、電子書籍化してみました。今日の新古書店に当たる「ゾッキ屋」などというものもやり玉に挙げられていて、この当時から出版業界の抱える問題点はそう変わらないのだなと思わされます。なおこの「円本」に対するリアクションのひとつとして登場したのが「岩波文庫」であることは、岩波文庫の巻末の「読書子に寄す」で確認できます。つまり円本ブームが今日の文庫本の登場へとつながったわけです。

 技術的内容としては3種類の圏点が混在していること、行頭字下げが行われていないこと、かなり不規則な見出し後の字下げや文字修飾など、いわゆる通常の小説などとは随分性格の異なるコンテンツです。一部の見出しはページ上部に横書きで記述されていたようなのですが、さすがにこれは再現できませんでした。また、koboの画面サイズを考え、見出しの字下げ量を適宜調整しました。

 なお、このコンテンツ自体はkoboのストアにも青空文庫経由で入っていて、「1円」で購入できます。1円なんですよね、偶然にも

※1 セミナーでInDesignからのEPUB作成やめようよとか言っておいてInDesign使うのかよ、というツッコミをいただきそうですが、あれはそもそも数年先にそちらの方向を目指そうよ、という話ですので悪しからず。自分でつくったワークフロー使わないのももったいないですしね。いずれもっと効率的なEPUB制作ツールが出てくるまでの「繋ぎ」です。

(2012.8.22)

 サンプルEPUBファイルを更新しました。CSSのdisplay:table表記が原因でAdobe Digital Editions 2.0にて画像が表示されない問題の修正です。また、また、各xhtmlファイル内の<head>タグ内<meta>〜表記が原因でバリデートエラーが出ていましたので削除しました。

(2012.9.27)

 Wordpressの更新に伴い、ダウンロードファイルを削除しました。古い情報のためもう必要ないものと判断したものです。

(2020.1.17)

InDesign出力XML→XMDF変換スクリプト公開

2012/08/10

 「緊デジ」でリフロー型EPUB3の制作受け入れが決まりました。同時に出版社サイドからの制作会社指定が可能になり、PDF制作にも対応、申請点数の上限を年間発行点数の2倍までとした規定の廃止など、申請条件を大幅に変更した旨のお知らせが、緊デジサイトに掲載されています。EPUB3の制作ガイドラインの内容告知、EPUB制作会社の選定準備等は9月1日以降になるとのことで、XMDF・ドットブック形式の制作会社はすでに決定しはじめていると思われるものの、8月7日現在での申請数が未だ目標の6万点の半分にも届いていない状況を考えると「一度仕切り直し」感は否めません。

 ほとんど前例のないプロジェクトですので関係者の方を一方的に責める気にはなれないのですが、制作サイドの会社に所属している一人としては、ここまでスケジュールが遅れている現状でなお当初の予定通り3月末までに6万冊を揃えることが可能な見通しなのか不安があります。おおざっぱなものでも構いませんので、早い時期に今後の制作スケジュールの見通しを示していただくことを望みたく思います

 さて、私の所属している会社は結局XMDF・ドットブックの緊デジ制作会社には選ばれなかったのですが、制作に向けてXMDF変換スクリプトの準備は進めておりました。制作者としてこのまま無駄にするのも忍びない思いがありますので、会社の許可を得てこれを公開してしまうことにしました。以下よりダウンロードいただけます。

InDesign CS5 XML→XMDF変換スクリプト

(XMLファイルを「ID5XML2xmdf.bat」にドラッグ&ドロップすると置換されます)
(XMLファイルをテキストエディタ「mi」で開き、スクリプトを実行すると置換されます)

 なおこれは、私のブログに掲載されております「InDesign→EPUB3用XHTML作成ワークフロー」の手順に従ってタグ付け作業を行ったInDesignデータから書き出したXMLデータを、XMDF本文用のXMLデータに変換するためのスクリプトです。手順19までは共通の流れとなりますのでご了解ください。また、配布スクリプトをWindows環境でご使用いただくには、あらかじめActivePerlのインストールが必要になります。
 割り当てるタグの名称等は上記ワークフローのそれに準じます(つまり、同一のXMLソースからスクリプトの切り替えだけでEPUB用XHTMLとXMDF用XMLの双方の出力が可能です)。

XMDFビルダー側で必要になる作業

 本文をXMDF形式のXMLデータに変換した後、実際にXMDFコンテンツとして書き出すためにXMDFビルダー側で以下の作業が必要になります。なお、XMDFビルダー内での詳細な操作に関しましては、XMDF情報スクエアにてログイン後ダウンロード可能な説明書をご参照下さい。また、緊デジでの作業内容に関しましては、公式サイトのガイドライン等をご参照いただければ幸いです。

1 テキストをコピー&ペーストします

テキストをコピー&ペースト

テキストをコピー&ペースト

 変換済のXMLファイルをメモ帳等で開き、一番上の「<?xml version="1.0" encoding="UTF-8" standalone="yes"?>」の行を除いた全てのテキストを、XMDFビルダー「ワークスペース」内の「フロー」にコピー&ペーストします。また、画像・外字画像等を使用している場合は、「パーツマネージャー」からコンテンツ内に取り込んでおきます。

2 スタイルを設定します

スタイルを設定

スタイルを設定

 「文書構造スタイル」「文字スタイル」を設定します。書き出されたタグのうち、「<structure style="○○">」の「○○」が文書構造スタイル名(InDesignで言うところの段落スタイル名)に相当します。同じく「<font style="××">」の「××」が文字スタイル名です。
 XMDFビルダー内「基本構成」メニュー内「スタイル」にて設定できますので、適宜適切な値に設定します。各スタイル名をスクリプトが自動出力する値以外に設定したい場合は、あらかじめテキストエディタの一括置換機能などでXMLファイル内のスタイル名を置換した上で、XMDFビルダー側に置換後の名称を設定することで対応できます。
 なお、「コンテンツテンプレート」機能を用いて各種パラメータをインポート/エキスポートできますので、見出し/本文等のスタイル設定を保存しておくことは可能です。

3 画像の回り込みなどを設定します

画像の回り込み等を設定

画像の回り込み等を設定

 必要であれば画像の回り込み、表示方法などを設定します。

4 文書内リンク等を設定します

文書内リンクの設定

文書内リンクの設定

 文書内リンクは「<char_id char_id="■">※</char_id>」といった形で出力されますので、「■」を選択して「装飾編集」パレット「イベントID」からID番号を入力し、「基本構成」メニュー内「イベント編集」で移動先のページ等を設定します。なお、こちらの作業は手順として、一冊分全てのフローを設定した後で行った方が効率的と思われます。

5 外字の代替文字を入力します

 外字は「<external_char alt="〓" alt_img=”cid-0000.png” />」のような形で出力されますので、「〓」部分に適宜代替文字を入力します。代替文字を入力しなくても、外字画像が適切に設定されていれば通常表示に問題はありませんが、将来的な変換や読み上げ等の対応を考えた場合、入力しておいた方が何かと流用が効きやすいデータになるように思います。

InDesign内で外字ファイル名にルビを設定

InDesign内で外字ファイル名にルビを設定

 なお、外字にルビをかける場合は、InDesignドキュメント内にインラインで記述されている外字ファイル名(「InDesign→EPUB3用XHTML作成ワークフロー」手順3参照)にグループルビとしてルビを入力しておくことで、自動で変換出力されます。
 なお、EPUB3出力でも同様の外字ルビ処理に対応するため、そちらのスクリプトも改訂いたしました。適宜ダウンロードしていただければ幸いです。

 緊デジでの画像サイズの設定、ファイル名の規定等に関しましては、公式ガイドラインをご参照下さい。また、こちらのスクリプトを使用したことによるデータ破損等の損害に関しまして、私としては責任は負いかねますので、あくまで自己責任でご使用ください。

(2012.8.10)

Mac用置換スクリプトで「<p.indent>〜」等の記述が正常に変換されないケースがあった問題を修正しました。

(2012.9.6)

Text::MarkdownでHTMLを生成してみる

2012/08/06

 テキスト文書から簡単にHTMLなどのタグ付きテキストを生成するための方法のひとつとして、「Wiki記法」というものがあります。これはHTMLを直にバリバリ書くのはそれなりに手間がかかるために作られた軽量マークアップ言語で、Wikipediaで使われる独自記法や、はてなダイアリーで使用できるはてな記法などもこういった軽量マークアップ言語の範疇に入ります。
 そういったもののひとつで、比較的メジャーなものに「Markdown記法」※1があり、この記法で書かれたテキストからHTMLに変換するための「Text::Markdown」というPerlのモジュールが公開されていますので、電子書籍制作のツールとして利用できるのではないかと思い、ちょっと試してみました。

CPANからText::Markdownをインストールする

 Mac OS Xには標準でPerlがインストールされており、特にインストール等の作業を行うことなしにターミナルやスクリプト等を介して利用することができます。ただ、Text::Markdownは標準で入っているモジュールではありませんので、別途Perlのライブラリ・モジュールアーカイブである「CPAN」からインストールし、使用できるようにしておく必要があります。これは以下の手順で行いました。

1 cpanminusをインストールする

cpanminusをインストール

cpanminusをインストール

 正直インストールに関してはOSや環境による差異が大きいようで、私はこのあたりのものをやっと使えるようになったレベルですのでインストール時のオプション等でそう詳しいことはわかりませんし、おそらくここで上げている以外のインストール方法もあると思われるのですが、とりあえずこちらの環境(OS X 10.7)でインストールに成功したパターンを上げておきます。

 まず、cpanminus(cpanm)をインストールします。cpanminusは、標準で入っているcpanコマンドよりも簡単にモジュールのインストールを行えるインストーラです。なお、Mac OS X 10.7では、cpanminusのインストールを実行する前にDeveloper Tools(Xcode)及び、gcc-4.2をインストールしておく必要があるようです。XcodeはApp Store、gcc-4.2はこちらから入手できます(GCC-10.7.pkg)。また、言うまでもありませんがインターネット接続環境は必須です。

 これらをあらかじめインストールした上で、ターミナルから

curl -L http://cpanmin.us | perl – –sudo App::cpanminus

 のコマンドを打ち込むことで、cpanminusのインストールが完了します。途中でパスワードを聞かれますので、OSのログインパスワードを入力してください。インストールに関しての参考文献はこちら※2。また、書籍になりますがPerl CPANモジュールガイド(ワークスコーポレーション)に詳しい解説が掲載されており、参考になりました。

2 Text::Markdownをインストールする

次に、cpanminusを使用してText::Markdownをインストールします。同じくターミナルから

sudo -H cpanm Text::Markdown

 のコマンドを打ち込み、インストールします。インストール後、「man Text::Markdown」と入力してターミナル内画面にText::Markdownのマニュアルが表示されればOKです(マニュアル画面から抜けるには「Q」をタイプ)。

ターミナルから使ってみる

 まずはターミナルからコマンドラインで使ってみます。以下のコマンドを打ち込み、欧文スペースを入力した後、末尾に処理したいファイルをドラッグ&ドロップし、リターンキーを押します。

perl -i -pe ‘use Text::Markdown qw/markdown/;$_ = markdown($_)’ 処理したいファイル

HTMLに変換された

HTMLに変換された

 これだけで、Markdown記法のテキストがHTMLタグテキストに変換されます。もとのテキストの改行コードをCR(Mac)にしておくこと、ファイル名に日本語や空白文字を使わないことなど注意点はいくつかありますが、それなりに便利に使えそうです。

テキストエディタ内で使えるようにしてみた

 せっかくなので、アプリケーション内からApplescript経由で呼び出せるようにしてみました。フロントエンドにはいつも使用しているフリーのテキストエディタ、「mi」を使いました。変換したいテキスト範囲をエディタ内で選択し、スクリプトを実行すると変換が実行されます。

tell application “mi”

–選択範囲のテキストを取得

set myTxt to selection of document 1

–変換対象テキストに取得したテキストをセット

set stringRef to myTxt

–perlの置換式を設定

set regexp to “use Text::Markdown qw/markdown/;my $html = markdown($_);print $html;”

–サブルーチンに置換式、変換対象テキストを投げ、Text::MarkdownモジュールでMarkdownテキストをHTMLに変換、変数modoriに変換後のテキストを取得

try

set modori to regexReplace(stringRef, regexp) of me

end try

–選択範囲のテキストを置き換える

set selection of document 1 to modori

end tell

–perl処理サブルーチン

on regexReplace(stringRef, regexp)

set perlScript to “utf8::decode($ARGV[0]); $_ = $ARGV[0]; ” & regexp as Unicode text

set perlScript to quoted form of perlScript

try

set stringRef to do shell script “perl -Mutf8 -e ” & perlScript & ” ” & quoted form of (contents of stringRef)

on error errMsg number errNum

set msg to contents of stringRef

display alert (msg & return & return & errMsg & return & errNum) as Unicode text

end try

return stringRef

end regexReplace

 処理としてはApplescriptで現在選択しているテキストを取得し、ワンライナー構文でPerlに送ってText::MarkdownでHTML変換しています。その後処理を終えて戻ってきたテキストを再びApplescriptで選択範囲に書き込んでいます。

 今回使ってみた感想として、正直Markdown記法自体は簡便過ぎて電子書籍の制作自体には補助的にしか使えそうにないという印象を受けました。ルビやSectionなどのHTML5関連の記述はMarkdown記法ではできないことや※3、テーブルタグの記述にも対応していませんのでかなり機能的に割り切った印象を受けます。ただ、それでもブログの記事作成等には十分使えそうですし、テキスト内の一部分を選択してHTMLに変換するなどの使用法なら電子書籍の制作の役にも立ちそうですので公開してみました。なお、このスクリプトを使用したことでコンテンツ破損などの損害が生じた場合、私としての責任は負いかねますのであくまで自己責任にてご使用ください。

 また、CPANはこの「Text::Markdown」に限らず数限りないモジュールが登録されている先人の叡智の結晶で、使い方を習得しさえすれば正直「宝の山」と思いますので、使ったことのない方はぜひ試してみることをお勧めしておきます。Applescriptと連携させればInDesignやIllustratorの自動処理にももちろん使えます(使ってます)。
 私はPerlは勉強し始めたばかりの素人ですが、多少かじった程度でもDTPの効率化目的で相当役に立つツールであることを日々実感しております。

※1 参考(Markdown記法):http://blog.2310.net/archives/6
※2 参考(cpanmインストール):http://artifactsauce.blogspot.jp/2010/10/cpanmmac-os-x.html http://www.goodpic.com/mt/archives2/2011/10/osx_107_lion_perl_cpanm.html
※3 通常のHTMLタグをMarkdown構文の中に記述することは可能です。

(2012.8.06)

プロフィール
Jun Tajima

こちらにて、電子書籍&Web制作を担当しています。
このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。少しでも早い段階で快適な電子書籍閲覧・制作環境が整うことを願って、現場からの声を発信していこうと目論んでおります。

当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。また、本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。