イントラネットで表示されているページを印刷しようとすると、A4・縦で印刷したいのに、デフォルトはA4・横になっているため、印刷設定を毎回「縦」に変更しなくてはならない事にガマンの限界が...。
イントラネットはWindowsサーバー上IISでASと一部PHPで作っています。
印刷設定(用紙設定)はASPやJavascriptの関数があるんかな?
といろいろ検索しましたが見つかりませんでした...。
しかし、替わりに見つけたのはActtiveXコントロール「ScriptX」を使った方法!
まず以下のページで「Dowload smsx.cab」ボタンを押してダウンロード
任意のディレクトリにアップロード
印刷設定を使うページに以下のコードを挿入し、
<object>タグでActiveXコントロール読み込む。
<!-- ScriptX 読み込み --> <object id=factory classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="http://**smsx.cabを設置した場所のパス**/smsx.cab#Version=6,5,439,72(←バージョンによって書き換える)"> </object> <!-- ScriptX 読み込み -->
次にJavascriptファンクションで印刷設定を行う。
<script type="text/javascript"> function printWindow() { factory.printing.header = "ヘッダ名"; factory.printing.footer = "フッタ名"; factory.printing.portrait = false; // 用紙方向 true: 縦 false: 横 factory.printing.leftMargin = 1.0; factory.printing.topMargin = 1.0; factory.printing.rightMargin = 1.0; factory.printing.bottomMargin = 1.0; factory.printing.Print(false); // 印刷実行 ture: 印刷ダイアログなし false: 印刷ダイアログあり } </script>
あとはファンクションを呼び出すだけでOK!
<input type="button" value="ScriptXで印刷" onclick="printWindow();" />自分の場合は印刷ページ表示と同時に印刷するので、
<body onload="printWindow();">
としました。
※初回使用時は「ActiveXをインストールしますか?」見たいな警告が出ますが、インストールしてしてください。
その他
ヘッダ・フッタに、現在日・ページ数出力
factory.printing.header = "ヘッダ名 &b 日付: &d"; // 現在日出力 factory.printing.footer = "フッタ名 &b &p/&P ページ"; // ページ数出力
これでイントラネットとインターネットでヘッダー・フッター印刷を切り分けられそうなのがいいです。
ヘッダーとフッターで使える記号
- &w : 印刷するホームページのタイトル
- &u : 印刷するページのアドレス
- &d : 現在の日付(xxxx/xx/xx 形式)
- &D : 現在の日付(xxxx年xx月xx日 形式)
- &t : 現在の時刻(コントロールパネルの「地域」で設定されている形式)
- &T : 現在の時刻(xx:xx:xx 形式)
- &p : 現在のページ番号
- &P : 総ページ数
- &b : 右揃えの文字列(「&b」に続けて文字列を入力)
- &b&b : 中央揃えの文字列(最初の「&b」に続けて文字列を入力)と右揃えの文字列(2 番目の「&b」に続けて文字列を入力)
- && : アンパサンド(&)
直接印刷(印刷ダイアログ表示なし)だけを直接使う
factory.printing.Print(true);
プレビュー画面を表示
factory.printing.Preview();
ActiveXコントロールだけにWindowsサーバー上ブラウザがIEじゃないと動かないとは思うのですが、WindowsサーバーであればIISじゃなくてもApatchでも動き、<object>タグで「smsx.cab」さえ読み込めばPHPでも使えるようなことが書かれたページがありました。
有償版もあるようですが、用紙サイズの指定とかもできるみたいです。