印刷枚数を最高1/16に圧縮するエコノミー印刷コマンド&u2psパッチ

問題点

印刷すると、PCがなくても文章を読めるので便利ですね。 ただ、困るのが長い文書は紙がかさばることです。 この問題は1枚の紙に複数ページをまとめて印刷することで解決できます。

mpageコマンドは、複数ページのテキストファイルかPostScriptファイルをまとめて印刷します。 しかし、そのまま実行しては1ページの文書を4分割で印刷するなど、ページ数にあわない挙動をします。 そこで、PostScriptファイル(テキストファイルもu2psコマンドでPostScriptに変換する)のページ数から、適切な分割をしてくれるようなスクリプトを書きました。

このスクリプトは、5ページ以上の文書は8分割して印刷します。 8分割を両面印刷することで、紙の使用量を1/16にまで落とすことができます。 80ページの文書が5枚におさまるのです。 さらに、文字が小さいと、左右への視線の移動がなくなるので速読しやすいというメリットもあります。

さっそくレーザープリンタを買った ので、レバレッジメモ をこのコマンドで印刷して持ち歩いています。 レバレッジメモを常に持ち歩くためには、かさばると困るのです。 また、大量の文書を少ない枚数の紙で持ち運べるので、PDAを使うことがなくなりました。

仕様

とりあえず、最低限のlprコマンドの置き換えができるような作りにしました。

  • 1ページならば、分割なし
  • 2ページなら2分割
  • 3〜4ページなら4分割
  • それ以上なら8分割(両面に印刷すると枚数が1/16!)
  • テキストファイルはu2psでPostScriptに変換する
  • PDFはpdf2psでPostScriptに変換する
  • 画像ファイルはそのまま印刷する
  • 最後にgvでプレビューする
  • オプションは-J(タイトル指定)のみ

短いので、必要ならば適当に拡張してください。

必要なもの

  • CUPS
  • gv
  • pdf2ps
  • u2ps (gnome-u2ps)
  • mpage
  • Ruby (1.8, 1.9両対応)

コード

以下からダウンロードし、lprという名前でホームディレクトリに保存します。 もちろん実行可能にしておきます。

http://www.rubyist.net/~rubikitch/archive/lpr

使い方


$ echo stdin | lpr
$ lpr foo.txt
$ lpr -J DocumentTitle foo.txt
$ lpr foo.jpg
$ lpr foo.pdf
$ lpr foo.ps
Emacsでも使える

lprコマンドの置き換えなので、Emacsの中でもそのままM-x print-bufferやM-x print-regionで印刷できます。

u2psのパッチ

途中で改行をしないようにするパッチ

UTF-8環境のUnixで日本語を印刷するには、u2psコマンドを使います。 しかし、u2psは半角と全角の間のおかしな位置で改行を入れてきます。 これを修正するパッチです。

http://www.rubyist.net/~rubikitch/archive/gnome-u2ps-unbreakable.patch

<2010-10-30 土>更新 オフセットをそろえるパッチ

さらに、ページごとにxオフセットが異なるのでそろえるパッチです。これでソースコードを読むのが楽になります。

http://www.rubyist.net/~rubikitch/archive/gnome-u2ps-xoffset.patch