電書部技術班,電子書籍配信サーバーに挑む

第6回 電書原稿からPDFをつくりだす

この記事を読むのに必要な時間:およそ 3.5 分

今回はPDF形式の電書を作成する仕組みについて説明します。既に原稿フォーマットについては第4回で説明したので,元となる原稿からPDFを作成する部分を中心に説明していきます。

PDF

PDF(Portable Document Format)は,現在幅広く使用されているファイルフォーマットです。PCではもちろんのこと,キンドルや iPhoneでも同様のレイアウトで読むことができます。電書部ではキンドルで読めるようにするために,当初からPDF形式の対応が必須の要件になっていました。

開発を志したきっかけ

第1回でも触れられていたとおり,最初にPDFを作成して販売したのは2009年12月9日に開催された第9回文学フリマでした。そもそもの発端は米光初代部長の「キンドルで売ったら絶対話題になる!」という一言でした。正直ぴんと来ていませんでしたが,新しいものが好きだったのでやってみることにしたのです。

私達は文学フリマでbnkrという同人誌を販売する予定で,印刷用のPDFファイルをInDesignを使用して作成していました。しかし,そのままでは文字が小さくてキンドルで読むには不向きです。文字を大きくすると今度はレイアウトが崩れるなど,微調整に時間がかかり,結局元の原稿からコピーペーストして,WordでPDFを作成しました。当日朝の5時まで作業を繰り返し,もうろうとする意識の中で,簡単にPDF化できるようにしようと決意しました。

当初の要件

PDF形式の電書に関する要件は,大きく分けて以下の2つです。

  • 電書部のフォーマットに沿って作成されたファイルを元に,PCとキンドルで表示できるPDFを作成する
  • 「精神的DRM」としてPDFに購入者のメールアドレスを埋め込む

開発開始当初は組版もPDFの知識もなかったため,自分で対応する部分をできるかぎり少なくするように既存のツールやサービスを組み合わせていきました。PDF形式の電書作成では青空キンドル,作成後のPDFに購入者のメールアドレスを埋め込む処理ではRubyのライブラリであるPrawnを中心にすえています。

以降で,それぞれの処理について説明します。

PDF形式の電書作成の流れ

PDF形式の電書は以下の流れで作成しています。青線で囲った部分と青い矢印で示した部分が青空キンドルで公開されていた処理,赤い矢印が私が追加,修正した部分です※1)⁠

※1
厳密にいうと,LaTeXのソースコードとPDFの間にはdviファイルという中間ファイルが生成されますが,簡略化のために省きます。

図1 okuduke.txt,01~03.txtを元にdensho.pdfを作成する場合の例

図1 okuduke.txt,01~03.txtを元にdensho.pdfを作成する場合の例

大きく分けて以下の順序で処理されます。

  1. ファイル名,作者名などの電書情報が記載されているokuduke.txtファイルから表紙(cover.tex)や奥付(okuduke.tex)のLaTeXソースコードを,各章毎に別れている本文ファイルから本文のLaTeXソースコードを生成する
  2. 各ソースコードを元にPDFを作成する
  3. 各PDFを連結して,ひとつのPDFにする

このうちキモとなるLaTeXのソースコードとPDF作成部分を,青空キンドルで公開されている情報を元に作成しています。このため,まず青空キンドルから説明します。

青空キンドル

青空キンドルは,takayama氏が作成・公開されている,青空文庫のテキストを元にキンドルで読めるPDFファイルを作成するサイトです。また使用しているスタイルファイルは齋藤修三郎氏から提供されています。

青空文庫で公開されているテキストファイルは,青空記法という独自の記法に沿って書かれています。青空キンドルはRubyを使用して青空記法をLaTeXのソースコードに変換し,それを元にPDFファイルを作成しています。このとき,書式やレイアウトを指定するスタイルファイルも必要となります。これらのRubyスクリプト,LaTeXのスタイルファイルはすべてサイトで公開されています。PDF形式の電書作成処理は,これらのファイルを元に作成しました※2)⁠

ここでは,筆者が追加,修正した部分について説明します。

※2
作成したPDF作成処理は公開することも想定していたため,改変,公開に関しては,takayama氏,齋藤氏に事前に許可をいただきました。

「YDML(Yonemitsu Densho Markup Language)」の解釈

青空キンドルは青空記法をLaTeXのソースコードに変換しているため,YDML(Yonemitsu Densho Markup Language)を解釈してLaTeXのソースコードに変換するように変更しました(YDMLの記法については第4回を参照してください。変換方法も,第4回でも記載されていたepubと同じく正規表現を使用しています。

たとえば,以下のような「YDML」マークアップがあった場合,

マークアップを入れた本文ファイル

ふつうの文字はこれくらいですが
<large>文字大きくしたり</large>
<small>文字小さくしたり</small>
<bold>太文字にしたり</bold>
<ruby>ルビ/るび</ruby>をふったりできます。

このように変換されます。

LaTeXのソースコードに変換した結果

ふつうの文字はこれくらいですが,
{\LARGE 文字大きくしたり}
{\scriptsize 文字小さくしたり}
\textgt{太文字にしたり}
\ruby{ルビ}{るび}をふったりできます。

上記のソースコードは最終的には以下のようなPDFとなります。

図2 PDFに変換した結果

図2 PDFに変換した結果

縦組から横組への変更

青空キンドルはもともと縦組のPDFファイルを作成するようになっていましたが,開発当初は一部の半角記号の表示がうまくいかなかったため横組に変更しました。テキストからLaTeXのソースコードへの変換処理と,LaTeXのスタイルファイルに修正を加えることで対応できました。

著者プロフィール

tk_zombie

電書部技術班PDF係。大学ではハエを研究していましたがバイオテクノロジーな就職先が見つからずITベンチャーに入社,SEを経て現在はサポートセンターのリーダー。製品問い合わせと格闘する毎日です。本職とは関係ないですがエキサイトレビューのゾンビ担当もやっています。ゾンビが好きです。デッドライジング2の開発者,稲船敬二さんにインタビューしたのが数少ない自慢。Twitterは@tk_zombie

コメント

コメントの記入