ActivePerl+IEでHTMLを印刷する
とりあえずこんなコードでできる……んですが、これだとIEが開きっぱなしになるのが玉に瑕。かといって非表示のまま印刷しようとするとエラーになるし、環境によってはJS用のダイアログとかぼろぼろ出てくるので隠すだけの価値があるかはいささか微妙。イベントとかきちんと扱えば印刷終了後に消したりできるのかなとも思うのですが、そこまでは調べておらず(わかる方教えてください)。
use strict; use Win32::OLE; my $OLECMDID_PRINT = 6; my $OLECMDEXECOPT_PROMPTUSER = 1; # 印刷ダイアログを出す my $OLECMDEXECOPT_DONTPROMPTUSER = 2; # 印刷ダイアログは出さない my $url = 'http://d.hatena.ne.jp/charsbar/'; my $ie = Win32::OLE->new('InternetExplorer.Application') or die "IE is unavailable"; $ie->navigate($url); sleep 1 while $ie->{ReadyState} < 4; $ie->{Visible} = 1; $ie->ExecWB($OLECMDID_PRINT, $OLECMDEXECOPT_DONTPROMPTUSER);
ところでこれ、Printer::Win32というモジュールのパクリなんですが(いちおうOLEの変数名とかはMSDNで調べた)、このモジュール、該当部分のコードにバグがあるものだから(sub MS_ieの変数渡しのところをshift()じゃなく@_に変えればとりあえず動く)、そのままでは使えなかったり。そのままPrinter->printする分には便利そうなんですが、どうしたもんかなあだったりする。