IEの印刷設定をActiveXコントロールとJavascriptで行う方法

  • 投稿
  • 編集

イントラネットで表示されているページを印刷しようとすると、A4・で印刷したいのに、デフォルトはA4・になっているため、印刷設定を毎回「」に変更しなくてはならない事にガマンの限界が...。

 

イントラネットはWindowsサーバー上IISでASと一部PHPで作っています。

 

印刷設定(用紙設定)はASPやJavascriptの関数があるんかな?

といろいろ検索しましたが見つかりませんでした...。

 

しかし、替わりに見つけたのはActtiveXコントロール「ScriptX」を使った方法!

まず以下のページで「Dowload smsx.cab」ボタンを押してダウンロード

任意のディレクトリにアップロード

印刷設定を使うページに以下のコードを挿入し、

<object>タグでActiveXコントロール読み込む。

<!-- ScriptX 読み込み -->
<object id=factory style="display:none"
 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でも使えるようなことが書かれたページがありました。

 

有償版もあるようですが、用紙サイズの指定とかもできるみたいです。