今回はPDF形式の電書を作成する仕組みについて説明します。既に原稿フォーマットについては第4回で説明したので、
PDF
開発を志したきっかけ
第1回でも触れられていたとおり、
私達は文学フリマでbnkrという同人誌を販売する予定で、
当初の要件
PDF形式の電書に関する要件は、
- 電書部のフォーマットに沿って作成されたファイルを元に、
PCとキンドルで表示できるPDFを作成する - 「精神的DRM」
としてPDFに購入者のメールアドレスを埋め込む
開発開始当初は組版もPDFの知識もなかったため、
以降で、
PDF形式の電書作成の流れ
PDF形式の電書は以下の流れで作成しています。青線で囲った部分と青い矢印で示した部分が青空キンドルで公開されていた処理、

大きく分けて以下の順序で処理されます。
- ファイル名、
作者名などの電書情報が記載されているokuduke. txtファイルから表紙 (cover. tex) や奥付 (okuduke. tex) のLaTeXソースコードを、 各章毎に別れている本文ファイルから本文のLaTeXソースコードを生成する - 各ソースコードを元にPDFを作成する
- 各PDFを連結して、
ひとつのPDFにする
このうちキモとなるLaTeXのソースコードとPDF作成部分を、
青空キンドル
青空キンドルは、
青空文庫で公開されているテキストファイルは、 ここでは、 青空キンドルは青空記法をLaTeXのソースコードに変換しているため、 たとえば、 このように変換されます。 上記のソースコードは最終的には以下のようなPDFとなります。 青空キンドルはもともと縦組のPDFファイルを作成するようになっていましたが、 青空文庫は一つの作品が一つのテキストファイルになりますが、 当初は青空キンドル/iPhone用の設定をそのまま使っていたため文字が大きく、 今は、 以上を2010年5月23日開催の第10回文学フリマまでに開発しました。そして、 小説等は文字を縦組にしたいという要望を受けました。開発当初はうまく表示できなかった半角記号について対応策が見えたため、 テキストファイルからPDFを作成する処理が完成した後で、 このため、 2010年7月前後にキンドルがバージョンアップしたときに、 PrawnはPDFを扱うライブラリで、 jpgファイルをPDFに変換する処理は、 上記のようにして作成したPDFを、 現在、 なお、 第1回、 なお、 現在は開発中のバージョンに筆者が修正を入れたPrawnを電書サーバーにアップロードして、 ただし、 第4回で紹介されているように新しいパーサーが開発されたため、 また、 PDF形式の電書作成は、「YDML
ふつうの文字はこれくらいですが
<large>文字大きくしたり</large>
<small>文字小さくしたり</small>
<bold>太文字にしたり</bold>
<ruby>ルビ/るび</ruby>をふったりできます。
ふつうの文字はこれくらいですが、
{\LARGE 文字大きくしたり}
{\scriptsize 文字小さくしたり}
\textgt{太文字にしたり}
\ruby{ルビ}{るび}をふったりできます。
縦組から横組への変更
PDF文書のマージ
PC版の対応
追加開発
縦組追加
画像オンリー
キンドルの仕様変更への対応
Prawn
require 'prawn'
pdf = Prawn::Document.new
pdf.text("Make PDF by Prawn")
pdf.render_file('prawn.pdf')
require 'prawn'
pdfsize = [600,800]
pdf = Prawn::Document.new(:page_size => pdfsize, :margin => 0) pdfsize, :margin => 0) 0)
pdf.image "image.jpg", :position => :center, :vposition => :center, :fit => pdfsize :center, :vposition => :center, :fit => pdfsize :center, :fit => pdfsize pdfsize
pdf.render_file "image.pdf"
まとめ : 電書部で作成可能なPDF
購入者のメールアドレス埋め込み
require 'prawn'
pdf = Prawn::Document.new(:template => "densho.pdf") "densho.pdf")
pdf.page_count.times do |i|
pdf.go_to_page(i+1)
pdf.text "mail@gmail.com"
end
pdf.render_file densho+mail.pdf
今後の対応予定
最後に