diary/Kojima

・psnup -2up problem

授業の準備でこんなことをしている時間は無いはずなのに、 気になるとあれこれ追いかけてしまうのはハッカーの性(さが)だろうか。。

ちと長いPDFなファイルを2upで印刷したくなってあれこれ試したのだけど、結構大変だった記録。

PDFのレベルで2upしてくれるソフトを探したらpdfjampdfnupというのが見つかった。 pdfjamはシェルスクリプトだけどバックエンドにpdfLaTeXが必要なそうなので見送り、 Pythonで書かれたpdfnupをしばらくイジってみた。

ところが、こいつがpythonのez_setup.pyベースでビルドするようになっている上に、--install-dir とか--prefixを指定しても動いてくれない。結局、あきらめて sudo で実行してインストールしてみたけど、 実行しようとすると、

% pdfnup
Traceback (most recent call last):
  File "/usr/bin/pdfnup", line 5, in <module>
    pkg_resources.run_script('pdfnup==0.4.1', 'pdfnup')
  File "/usr/lib64/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 489, in run_script
  File "/usr/lib64/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 1207, in run_script
  File "/usr/lib64/python2.7/site-packages/pdfnup-0.4.1-py2.7.egg/EGG-INFO/scripts/pdfnup", line 23, in <module>
    from pdfnup import *
  File "/usr/lib64/python2.7/site-packages/pdfnup-0.4.1-py2.7.egg/pdfnup.py", line 37, in <module>
    raise RuntimeError(_MSG)
RuntimeError: Please install pyPdf first, see http://pybrary.net/pyPdf

などと言うエラーになる。pyPdfは事前にインストールして、テストスクリプトも動くのにおかしいなぁ、、と 調べたら、数年前のpyPdfを前提としているらしい。

# そー言えば、ez_setup.py でも最近のeggファイルを見つけれずにエラーになっていたのだった。。

これは付きあいきれんなぁ、、と、PDFネイティブで処理することを諦めて、いったんPS化してpsnupをすることにしたが、 psnupは64ビット版をビルドしていない :-<

しかたないのでソースコードを拾ってビルドしてみたけど、印刷しようとするとプリンタが反応しない。

あれれ、と思って、cupsd.confのloglevelをdebugにして追いかけてみると、

[Job 12] max_gray = 1, dither_grays = 2
[Job 12] max_color = 0, dither_colors = 0
[Job 12] cups_print_chunked: xflip = 0, yflip = 0, height = 1074
[Job 12] prnt/hpcups/HPCupsFilter.cpp 253: ERROR: Unsupported resolution

などと、hpcups がエラーを出している。あまり見たことが無いエラーなので、Googleで調べてみると、 hplipとcupsの新版が出ているようなので、更新すれば解決するかな、とhplip-3.11.3aとcups-1.4.6をビルドして updatepkgしてみたら、今度はプリンタ出力が真っ黒け X-P

hpscan001.jpg

ちなみに、上の方に見えてるグレーの領域は、両面印刷の裏側で黒ベタになっている部分。 テスト印刷しようとすると、こんなのがゾロゾロと出てきてちょっと絶望的な気分に。 しかも、古いバージョンのcupsとhplipに戻しても復旧しない。。。(;_;)

こうなると、ちょっと頭を冷した方がよさそうだ、、、としばらく放置しておいてから、 cupsとhplipをremovepkgで削除し、インストール後に更新されているスプールやキャッシュ用のディレクトリも 手動で消去してから、改めてcupsとhplipをinstallpkgしてやると、何とかプリントアウトも復旧したので、 どうやらヘンなデータがスプールに残っていたのかな、という印象。

それでもpsnupの2upが出力できない問題は解決しないので、しばらくGoogleで調べたところ、 psnupはBoundingBoxを正しく計算せず、cupsは解像度決め打ちでドライバにデータを送るけど、 hpcupsはそういう決め打ちデータでは正しく印刷できないので、"unsupported resolution" のエラー終了するようになっているらしい。 ちなみに、このあたりは実装依存らしく、ドライバによっては出力できるのもあるらしいし、ghostscriptや Okularでは特に問題なく表示できていた。

何か修正するようなパッチがあるのかなぁ、、とDebianとSuSEのソースを眺めてみたけど、Debianはlibpaper1という 紙サイズ選択用のライブラリを必要とするようなかなり大掛かりなパッチらしい。コンパイル時に-DDEBIANを指定しなければ libpaper1は不要なものの、そのバイナリで作成した2upのPSファイルは、誤ったBoundingBoxは削除されるものの、 hpcupsは "%%BoundingBox: コメントがありません!" というエラーを出して印刷不能。

SuSEのパッチはもう少し小規模だったけど、出力される2upなファイルは元のコードの出力と同じで印刷不能。

いよいよ八方塞がりになってきたので、少し視点を変えて okular から出力してみたらどうなるかな、 と試してみたら、PSファイルのまま読み込んで出力しようとするとエラーで印刷不能なものの、 okular には「PSファイルをPDFとしてインポートする」という機能があって、この機能を使って2upなPSファイルをPDFとして読み込めば、 無事、2upなページを印刷することができた。

2up.jpg

まぁ、とりあえず目的は達したからよしとするものの、使いなれているからとpsnupにこだわりすぎたのが敗因な印象で、 pdftkあたりツールを使えばPDFレベルでの2upができた気もする。

okular-ng.jpg

hplipのプリンタマネージャから2upで印刷しようとすると内部で psnup -2upを起動してたりしたので、epdfviewの方までは気が回らなかった。 -- kojima 2011-04-04 (月) 17:43:51



添付ファイル: fileokular-ng.jpg 245件 [詳細] file2up.jpg 264件 [詳細] filehpscan001.jpg 231件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:42