IE7の新しい印刷機能をIE6で使う

IE6+印刷新機能の実験結果


Internet Explorer 7では、印刷機能がだいぶ改善されている。(参考:Internet Explorer 7 の印刷機能
といってもこれらの機能の大半はIEのネイティブコンポーネント(DLL,EXE)に対する改善の結果得られたものではなく、IE5.5から既に実装されている印刷テンプレート機能を使って実現されている(可能性が高い)。
つまり印刷テンプレートのHTML+スクリプトの改善(強化)によって実現されている(可能性が高い)。


ということは、IE7で強化された印刷テンプレート(HTML+スクリプト)を抜き出してIE6の環境に適用すれば、IE6でもIE7の新しい印刷機能の恩恵を受けることができるはずだ。


実際に以下の手順でIE6の印刷機能を強化することができた(ように見える)。


1.IE7 RC1をダウンロードする


2.ダウンロードしたIE7RC1-WindowsXP-x86-jpn.exeから、ieframe.dll、ieframe.dll.muiを抜き出す。なおこのセットアップEXEは自己解凍形式のCABなので、インストールしなくても、CABを展開できるソフトでこのexeから必要なファイルだけを抜き出すことができる。


3.リソースエディタを使って、ieframe.dll から PREVIEW.JS をエクスポートする。*1


4.リソースエディタを使って、ieframe.dll.mui から PREVIEW.DLG と、すべての *.png をエクスポートする。


5.エクスポートした PREVIEW.DLG を印刷テンプレートに指定して印刷を行う。*2


IE6では標準の印刷テンプレート(PREVIEW.DLG)は、shdoclc.dll(shdocvw.dllのリソースDLL)に含まれていたが、IE7では PREVIEW.DLG と PREVIEW.JS に別れ、格納されているDLLも ieframe.dll に変更されている。IE7には shdoclc.dll は存在しないようだ。


PREVIEW.JS には印刷テンプレートのJavaScript部分だけが格納され、ieframe.dll に入っている。このファイルは言語非依存だ。
PREVIEW.DLG には印刷テンプレートのHTML部分が格納され、ieframe.dll.mui に入っている。MUI(Multilingual User Interface)を使っていることから分かるとおり、PREVIEW.DLG は言語依存(日本語)のリソースになっている。



というわけで、IE7の新機能と言っても、こと印刷機能に関して言えばIE6でも印刷テンプレートを強化するだけで実現できそうだ。ただしIE7を入れても大丈夫なテスト環境がないので、今回の実験ではIE7はインストールしていないため、実際には印刷テンプレートを持ってきただけではIE6で実現できていない機能もあるのかもしれない。時間があれば今後検証してみたい。
マイクロソフトも、IE7を勧めるばかりでなくIE6のバージョンアップとして印刷テンプレートだけ強化してくれればよいのに。何かできない政治的な理由でもあるんだろうか?



11/8 追記

PREVIEW.JSは、XN Resource Editorを使っても取り出せなかった。記憶違いだったかな・・・
PREVIEW.JSをieframe.dllから取り出すには、以下の操作でできる。

(1)Internet Explorerを起動する(6.0でOK)
(2)アドレスバーに「res://c:\temp\IE7RC1-WindowsXP-x86-jpn\ieframe.dll/PREVIEW.JS」を入力する(赤字の部分はieframe.dllがある場所に変える)
(3)PREVIEW.JSの内容が表示されたら、【ファイル】-【名前をつけて保存】でPREVIEW.JSとして保存する

*1:ieframe.dllはリソースの一部が不完全(または新しいリソースタイプ?)らしく、Visual Studio 6.0のリソースエディタではieframe.dll読み込み時にエラーになってしまう。Platform Builder 5.0でも「グループエラー」になってしまった。今回はXN Resource Editor日本語版)を使った。

*2:標準IE6には印刷テンプレートをユーザーが指定する機能はないため、標準IE6では結局できない。BHOを使って標準IE6を少しだけ機能拡張し、印刷テンプレートを指定した印刷に対応すればOK。または整形して印刷するだけの目的であれば、このツールを使ってもよい。