通常 IMSLP などに保存されている楽譜は、実物の 1 ページが PDF の 1 ページに対応している。そのため、A3 ノビの紙に印刷して中綴じ製本するためには、適切にページを並べ替え、片面 2 ページづつ、両面で 4 ページを配置する - 面付けと呼ばれる - 必要がある。
簡易な面付けは Adobe Reader やプリンタドライバでも行える (N-up などと呼ばれる) が、これらの多くは紙面を均等に分割し、それぞれの中央に元のページに配置する。そのため、余白がノド (見開きの中央) にも来てしまい、三方裁ちをするような製本には向かない。
また、もとの PDF が菊倍版など楽譜に適した判型でなく、A4 などの判型になっている場合がある。この際は、一度菊倍版に配置しなおした上で、面付けを行う必要がある。
こうした処理が簡単にできる無償のソフトウェアが見つけられなかったので、書くことにした。
JRuby + iText を使う
PDF の作成・編集ライブラリには、Java で書かれた iText というライブラリが使いやすそうなので、これを使う。
ただ、私は Java での開発経験がないため、JRuby から利用することにした。JRuby は Ruby の Java による実装で、Java のクラスが扱えるのが大きな特徴。(今回はじめて使ったが、あまりにも簡単に Java のクラスが扱えて驚いた。今後も Java のライブラリが必要になったら使いたい。)
JRuby + iText のインストール
JRuby のインストール
今回は Mac OS X で開発 / 使用するので、Java のインストールは必要ない (標準でインストールされているため)。
JRuby は MacPorts を使ってインストールするので、必要なら MacPorts をインストールしておく。
MacPorts がインストールされていれば JRuby のインストールは下記のコマンドだけで完了する
sudo ports install jruby
インストールが終ったら、jirb コマンド (irb の jruby 版) などで、ちゃんと動くか試してみよう。
iText のインストール
iText 2.1.7 を利用する。最新版の 5 系より情報が多いのがその理由である。
SourceForge.net の iText のページから、下記の 3 つのファイルをダウンロードし /opt/local/share/java/jruby/lib 下にコピーしておく。
スクリプトの作成
今回は2つのスクリプトを作成した。
1in1.rb
入力ファイルのページを、指定したサイズのページ中央に配置して出力する。
jruby 1in1.rb [-with-tombo] 出力サイズ 入力ファイル名 [出力ファイル名]
2in1.rb
入力ファイルの2ページづつを、指定したサイズのページ中央に2つ横に並べて出力する。中綴じ製本用にページは並べ変えられ、出力の1ページ目が1枚目の表、2ページ目が1枚目の裏・・・となる。
jruby 2in1.rb [-with-tombo] [-first-page-is-left] 出力サイズ 入力ファイル名 [出力ファイル名]
引数
-with-tombo | トンボ (トリムマーク) を出力する |
---|---|
-first-page-is-left | 1 ページ目が見開きの左側であることを指定する。省略時は 1 ページ目が見開きの右側になる。 |
出力サイズ | '210x297' のように '幅x高さ' で指定する (単位は mm) か、下記のいずれかを指定する。 a3, a3+, a4, a5, a6, b3, b4, b5, b6, a3r, a3+r, a4r, a5r, a6r, b3r, b4r, b5r, b6r,kikubai, kikubai-alt ※ a3+ は A3 ノビ。r のついたものは長辺が横向き。kikubai は 227x304mm、kikubai-alt は 218x304mm。 |
入力ファイル名 | 入力ファイル名。 |
出力ファイル名 | 出力ファイル名。省略時は '出力サイズ_入力ファイル名' |
使用例
菊倍版に変更。
jruby 1in1.rb kikubai src.pdf kikubai.pdf
菊倍版のページをA3ノビに配置(トンボつき)
jruby 2in1.rb -with-tombo a3+r kikubai.pdf a3+r.pdf
上例のサンプル
コード
主に自分で使うために作ったものなので、例外処理などほとんどなし。著作権は放棄しますので、ご自由に。
参考リンク
- JRuby + iText + Google Chart APIでPDF出力 - 税理士業界でSaaS開発を行うプログラマの記録 - s21g - 今回もっとも参考になったページ
- J# Examples - iText の .NET 版の日本語チュートリアル
- iText-2.1.7.tar.gz - iText 2.1.7 のドキュメント