印刷プレビュー 2 : Internet Explorer 5.5 印刷機能のカスタマイズの (続編)
Chuck Ainslie
Microsoft Corporation
November 2000
日本語版最終更新日 2000 年 11 月 28 日
目次
はじめに
印刷プレビュー ユーザー インターフェイスの構築
調整可能な余白の UI 例
パンフレット エディタ (Brochure Editor)
結論
はじめに
今回の記事で、Microsoft® Internet Explorer 5.5 の印刷機能のカスタマイズに関する入門を終わりにするつもりです。印刷機能のカスタマイズの入門は、Internet
Explorer Developer Center で、8 月にご紹介した 「印刷プレビューを超えて : Internet Explorer 5.5 の印刷機能のカスタマイズ」 から始まりました。その記事では、4 つの印刷テンプレート ビヘイビア、LayoutRect、DeviceRect、TemplatePrinter、および HeaderFooter をご紹介し、その基本的な使用例を説明しました。この記事では、最後に 1 つ残った重要なトピックである印刷プレビュー ウィンドウのユーザー インターフェイスについて説明します。
メモ 前回の記事でご紹介した Printtemplates.exe サンプル アプリケーションに 8 番目の印刷テンプレートが追加されました。アップデートされたバージョンをお持ちでない場合は、次のリンクからダウンロードできます。
この記事のサンプルをダウンロードします
印刷プレビュー ユーザー インターフェイスの構築
Internet Explorer で印刷およびプレビューを行うときに、独自のテンプレートを使用する場合は、そのユーザー インターフェイスを提供する必要があります。ユーザー テンプレートに、既定または標準のユーザー インターフェイスを含めることはできません。役に立つ印刷テンプレートはいくつかのユーザー インターフェイス コントロールを含んでいます。代表的なコントロールには、印刷するためのボタン、ページ設定にアクセスするためのボタン、およびユーザーがビューを変更できるようなボタンやチェック ボックス (たとえば、ページの拡大、縮小や表示するページの切り替えなど) があります。
Template7.htm では、印刷テンプレート ユーザー インターフェイスの基本原則を示します。その機能のすべてを調べる必要はありません。大部分のテンプレートは、イベント ハンドラに関連付けられた通常のボタンやテキスト ボックスを使用します。ただし、ページ設定の設定値が変更されるとき、テンプレートが DEVICERECT 要素と LAYOUTRECT 要素を処理する方法を知っておくことは重要です。
DEVICERECT 要素と LAYOUTRECT 要素の管理
ユーザー インターフェイスを持つ印刷テンプレートを開発する場合、2 つの基本的な規則に従う必要があります。
- 一度作成した LAYOUTRECT 要素および DEVICERECT
要素を破棄してはいけません。代わりに、ビューからそれらを非表示にします。
- LAYOUTRECT 要素および DEVICERECT 要素を非表示にするために、display プロパティまたは visibility プロパティを使用してはいけません。動的な位置決めを使用して、それらを画面外に移動してください。
印刷プレビュー ウィンドウが [ページ設定 (Page Setup)] ボタンを持っている場合、ユーザーがページ設定の設定値を変更するたびに、あるいはページ設定がページ数に大きな影響を与えるたびに DEVICERECT 要素と LAYOUTRECT 要素のサイズと位置を更新する必要があります。したがって、印刷テンプレートは、ページ数が増加する場合は、新しいページを作成するように設計されている必要があります。また、ページが減少する場合はすべての余分なページを処理するように準備されている必要があります。
結果的に、前回の記事で説明した動的な印刷テンプレートは新しいページの作成を既に処理しています。それがどのように機能していたかを思い出すために Template3.htm をもう一度表示してみてください。Template3.htm はページ設定にアクセスするためのメカニズムを持っていませんが、そのメカニズムはほんとちょっとの時間で作成できるでしょう。Template3.htm でページ設定を変更する場合、そのメカニズムでは TemplatePrinter
ビヘイビアから pageWidth、pageHeight、および
margin を再度読み取り、それに応じて、LAYOUTRECT 要素と DEVICERECT 要素のスタイル
クラスを更新する必要があります。いずれかのスタイルの更新が、そのスタイルの height プロパティと width プロパティを実際に変更する場合は、そのソースを LAYOUTRECT
要素で再処理します。この再処理により、onlayoutcomplete
イベントがチェーン内の LAYOUTRECT ごとに再起動されます。このイベントは、任意の LAYOUTRECT 要素には効果がありませんが、最後の 1 つには効果があります。それは、最後の 1 つを除くすべての LAYOUTRECT 要素の
onlayoutcomplete イベント ハンドラが null に設定されているためです。最後の LAYOUTRECT が onlayoutcomplete に関連付けられたページ作成ハンドラを持っているので、新しいページが必要になったときに、そのページを作成できます。
ページ数が増加するときはこれで正しく動作します。では、ページ数が減少するとき、余分な LAYOUTRECT 要素と DEVICERECT 要素で何を行えばよいのでしょうか。可能な方法が 2 つあります。
- 不要な LAYOUTRECT 要素と DEVICERECT 要素を破棄します。
- 不要な LAYOUTRECT 要素と DEVICERECT 要素を非表示にします。
LAYOUTRECT 要素の破棄には、複雑な処理が必要です。第 1 に、要素はチェーンの最後からしか削除できません。チェーンの先頭や途中から要素を削除することはできません。第 2 に、チェーンの最後から LAYOUTRECT 要素を削除した場合、単純に再度追加して戻すことはできません。チェーンを先頭から再構築する必要があります。これは、大きいドキュメントの場合、パフォーマンスの低下を引き起こします。こういった理由から、ページが減少するときに不要になった LAYOUTRECT 要素と
DEVICERECT 要素は非表示にすることをお勧めします。
Template7.htm は次のような方法で余分なページを非表示にします。新しい LAYOUTRECT
を追加するときに、LAYOUTRECT で onlayoutcomplete イベントを
null に設定する代わりに、Template7.htm は onlayoutcomplete
イベント ハンドラを代替イベント ハンドラ関数に設定します。event.contentOverflow プロパティが false
の場合は、この新しいハンドラはページ合計を記録します。その後、event.contentoverflow
プロパティが false に設定されている LAYOUTRECT 以降に続く余分なページを非表示にするための関数を呼び出します。
Template7.htm の ShowFilledPagesAndHideExcessPages 関数は、2 つの理由から余分なページを非表示にするために display プロパティを使用していません。まず、表示されていない LAYOUTRECT 要素に対しては onlayoutcomplete
イベントが発行されません。display プロパティを使用すると、一度非表示になった
DEVICERECT は、その後永久に非表示のままです。次に、display プロパティを使用して非表示にすると、印刷テンプレート環境ではページの表示が低速になります。通常の位置決めの 5 倍以上低速になります。
ShowFilledPagesAndHideExcessPages は、余分な DEVICERECT
要素の display プロパティを操作するのではなく、合計ページ数以下のすべてのページの position プロパティを static に設定しています。その他のすべてのページの position プロパティを absolute
に設定します。DEVICERECT 要素にアタッチされたクラスは、-50
インチに設定された left プロパティを持ちます。DEVICERECT の position プロパティが static に設定されている場合は、left プロパティが無視され、ページが表示されます。DEVICERECT の position プロパティが absolute に設定されている場合は、left プロパティは無視されず、ページが画面の左側に押し出されます。
これは、簡単な印刷テンプレート用の簡単なメカニズムです。Internet Explorer の既定の印刷テンプレートが採用している別のソリューションは、その時点で印刷プレビュー ウィンドウに表示されている 1 ページ以外のすべてのページを非表示にしています。これを行うには、ShowFilledPagesAndHideExcessPages 関数は left プロパティ自体を操作して、現在表示されているページ以外のすべてのページと余分な空白ページを画面外に押し出します。
これで、印刷テンプレートのユーザー インターフェイスに関して考える必要のある最も重要な点を説明しました。この後、テンプレートに関して 2、3 の細かい点について説明します。まず、ユーザー インターフェイスのセクションとページがそれぞれ個別の DIV 要素に含まれていることに注目します。これらの DIV 要素はそれぞれ ui ID と pagecontainer ID を持っています。また、BODY 要素の SCROLL 属性が no に設定されていることにも注目します。さらに、ページを含む pagecontainer DIV のスタイルで
overflow プロパティが auto に設定されていることにも注目します。これらの設定により、ユーザー インターフェイス コントロールはいつも画面上に残り、ページは pagecontainer DIV (これはフレームを使わずにフレームのような外観を作成します) 内部でスクロールします。Init 関数にある次の行は、ウィンドウの高さを利用して pagecontainer DIV のサイズを設定するために必要です。
overflowcontainer.style.height = document.body.clientHeight - ui.clientHeight;
次に、ページの DEVICERECT 要素が pagecontainer
DIV 内に直接置かれていないことに注目します。代わりに、pagecontainer DIV 内でネストされる zoomcontainer と呼ばれる別の DIV に含まれます。ページの倍率を設定するズーム メカニズムは、 pagecontainer DIV または直接 DEVICERECT
要素自身に適用されるのではなく、この DIV に適用されます。pagecontainer にズームを適用すると、コンテナ内のページだけでなく、[印刷プレビュー (Print Preview)] ダイアログ ボックスのページ コンテナ ウィンドウ全体が拡大または縮小されます。ズームを個別の DEVICERECT 要素に適用すると、そのズーム設定でページが印刷されます。
次に、Internet Explorer の既定の印刷プレビュー インターフェイスにはないいくつかの機能を追加するサンプル テンプレートを示します。
調整可能な余白の UI 例
今年の Labor Day の週末にこの例を開発しました。どんな話をしようかと考えているときに、この考えがふと頭に浮かび、あとはこれを動作させる必要があるだけでした。新しい Template8.htm は Template7.htm を基礎にしています。[余白の非表示 (Hide Margins)] という名前のボタン、印刷テンプレートの LAYOUTRECT を囲む破線の四角形、およびページ 1 の LAYOUTRECT の左辺と上辺に
合計 4 つの余白マーカーを追加しました。[余白の非表示 (Hide Margins)] ボタンをクリックすると、破線の四角形と余白マーカーが消え、ボタンのテキストが [余白の表示 (Show Margins)] に変わります。余白マーカーは移動可能です。これらのマーカーを新しい位置にドラッグすると、余白のサイズを変更できます。余白マーカーをクリックすると、マーカーをドラッグするときに余白の設定を示すツール ヒントが表示されます。
マーカーは、pagecontainer DIV の IMG 要素としてテンプレートに追加しました。破線の四角形は、LAYOUTRECT 要素にアタッチされる lorstyle クラスの
border プロパティを使用して作成しました。
3 つのマウス イベントを pagecontainer DIV にアタッチし、調整可能な余白マーカーの機能を持たせます。これらのイベント ハンドラは、onmousedown、onmousemove、および onmouseup です。
onmousedown イベント ハンドラ は、マウスの左ボタンが押されたかどうかを調べます。ボタンが押された場合は、ハンドラはポインタがマーカー上にあるかどうかを調べます。ポインタがマーカー上にある場合は、ハンドラはそのことを示すフラグを設定します。また、ハンドラはマウス イベントが最初に発生した位置を記録し、関連する余白マーカーの現在の余白設定を使用してツール ヒントを開きます。
onmousemove イベント ハンドラはマウスの動きに応答して、関連する余白マーカーを移動します。左または右の余白マーカーの場合は水平に、上または下の余白マーカーの場合は垂直のいずれかの方向に移動します。ハンドラは、移動を行う前に、余白マーカーが反対側のマーカーの位置を超えていないかどうか、またはページの印刷できない位置に移動されていないかどうかを調べます。ハンドラは、マーカーを移動するときに、ツール ヒントに表示される余白情報も更新します。
onmouseup ハンドラが起動されるときに、余白が実際に変更されます。ハンドラは、余白マーカーの位置から新しい余白を決定し、ドキュメントのスタイル (lorstyle、headerstyle, および footerstyle) を更新します。ツールヒントは消去します。
これで、調整可能な余白を機能させるイベント ハンドラについての全般的な考え方を理解できたと思います。では、いくつか重要な部分をもう少し詳しく見てみましょう。これらの機能のうち 2 つのことについて考えます。まず、余白マーカーの位置を計算するときにズームのパーセンテージを含める必要があることです。これらの計算は関数 MouseMoveHandler で実行します。これらはかなり詳しく記述しているので、少し時間をかけて調べてみてください。
次は、余白位置はインチ単位 (実際には 100 分の 1 インチ単位) で計測されるのに対して、マーカー位置がピクセル単位で計算されることです。onmouseup ハンドラは、TemplatePrinter ビヘイビアを使用して、余白の設定を更新する前に、ピクセル単位のマークアップ位置をインチ単位に変換する必要があります。ここでは、ピクセルとインチの比率を決定するのに簡単な手段を使用しました。テンプレートは上辺と左辺から 1 インチの位置に余分な非表示のマーカーを持っています。この非表示のマーカーの pixelLeft プロパティと pixelTop プロパティの両方が 1 インチ内のピクセル数を提供します。この変換は関数 MouseUpHandler で実行され、すべてのマーカーに対して同じ式を使用します。左側の余白マーカーの変換式は次のようになります。
printer.marginLeft = 100 * (mmarkerLeft.offsetLeft - 5)/iPixelToInchRatio;
パンフレット エディタ (Brochure Editor)
Brochure Machine サンプル は、パンフレットを編集、印刷する簡単な Web ベースのアプリケーション例を示しています。プロジェクトのソース コード全体は、Brochure Machine の既定ページからダウンロードできます。Web ページには、2 つ折りのパンフレットが 2 ページで表示されます。各ページは編集可能な段を 3 つ持ち、透かしイメージを追加するオプションが含まれています。ユーザー インターフェイスとして、ユーザーがテキストやイメージの書式を設定できるツールバーを用意しています。ユーザーは、以下のことが行えます。
- テキストに太字または斜体の書式設定を適用できます。
- フォント、フォント サイズ、およびフォントの色を変更できます。
- イメージの追加、変更、位置移動、およびサイズ変更が可能です。
- 段の余白を変更できます。
この記事にとって最も重要なことは、印刷する前にプレビューするボタンがページに用意されていることです。
Web ページはパンフレットがどのように見えるかを表現するにはすぐれていますが、完全ではありません。やはり、その理由は印刷プレビューにあります。段に含まれるコンテンツが多すぎるときは、それを示すためにページは段にスクロール バーを表示します。印刷プレビュー モードでパンフレットを表示すると、パンフレットがどのように印刷されるかを示す正確なイメージを得ることができます。テンプレートは、各段を調べ、コンテンツがオーバーフローしていないことを確認します。また、プリンタの印刷の向きが横であることを確認し、必要に応じて印刷の向きを横にするように読者に通知します。
このサンプルには次の 3 つのファイルがあります。
- BrochureMachine.htm - 編集可能なパンフレットを持つ Web ページです。
- BrochureMachine.cab - BrochureMachine.dll を含むキャビネット ファイル。この dll は印刷プレビュー ウィンドウを開くコントロールです。
- PT.htm - パンフレットを表示、印刷する印刷テンプレート。このファイルは
BrochureMachine.dll に含まれるリソースです。
では、これらの各コンポーネントを見ていきましょう。
ActiveX コントロール、BrochureMachine.dll
このサンプルは Web ベースなので,カスタム テンプレートを使用して印刷およびプレビューするバイナリ コードは COM コンポーネントとして読み込まれ、ページの HEAD セクションにオブジェクトとして含まれます。コントロールは、Microsoft Visual C++® 6.0 と ATL コンポーネント ウィザードで開発されました。コードの大部分は、COM コントロールに対するサポートを提供するだけです。私たちの視点からは、作業部分は単一のインターフェイス IPTLauncher の LaunchPT という名前の単一のメソッドで構成されています。LaunchPT のコードは単純です。このメソッドは、
IOleContainer、IServiceProvider、IWebBrowser2、IDispatch、および IHTMLDocument2 経由で、コントロール内の IOleClientSite インターフェイスから、ドキュメント オブジェクトの IOleCommandTarget インターフェイスを取得します。その後 IOleCommandTarget::Exec を呼び出し、DLL に含まれるカスタム テンプレート リソース PT.htm のアドレスを指定する pvaIn パラメータを使用して IDM_PRINTPREVIEW コマンドを発行します。
注 理解しやすくするために、この関数にはエラー処理が含まれていません。
STDMETHODIMP CPTLauncher::LaunchPT()
{
CComPtr<IOleContainer> spContainer;
CComPtr<IServiceProvider> spSP;
CComPtr<IWebBrowser2> spWB;
CComPtr<IDispatch> spDisp;
CComPtr<IHTMLDocument2> spDoc;
CComPtr<IOleCommandTarget> spCT;
CComVariant vPTPath = "res:/BrochureMachine.dll/PT.htm";
m_spClientSite->GetContainer(&spContainer);
spContainer->QueryInterface(IID_IServiceProvider, (void**)&spSP);
spSP->QueryService(SID_SWebBrowserApp, IID_IWebBrowser, (void**)&spWB);
spWB->get_Document(&spDisp);
spDisp->QueryInterface(IID_IHTMLDocument2, (void**)&spDoc);
spDoc->QueryInterface(IID_IOleCommandTarget, (void**)&spCT);
spCT->Exec(&CGID_MSHTML, IDM_PRINTPREVIEW, NULL, &vPTPath, NULL);
return S_OK;
}
メイン ページ、BrochureMachine.htm
Brochure Machine の Web ページは、ユーザーにパンフレットの前後のページを表示し、さまざまな編集作業用のツールバーを提供します。ページはパンフレットのセクションごとに編集可能な段を持ちます。セクションスタイルとページの幅と高さは、レター サイズの用紙に対応するためにインチ単位で指定されます。以前にも説明したように、特定のセクションにコンテンツが収まりきらないことを示すためにスクロール バーを表示するように実装されています。
意味のある編集環境を提供するために、このサンプルには相当量のコードが含まれています。この記事に関連するコード セクションが 2 つあります。ShowPrintPreview 関数と、ドキュメント オブジェクトに expando オブジェクトを追加する Init 関数内の 1 行です。expando オブジェクトは、印刷テンプレートに情報を渡します。ShowPrintPreview はそのオブジェクトを初期化し、印刷プレビュー ウィンドウを開くために、LaunchPT を呼び出します。
テンプレート、PT.htm
PT.htm のほとんどの部分は、ほかの印刷テンプレートでこれまでに見てきた印刷コードを使用しています。それに加えて、LAYOUTRECT 要素がオーバーフローしていないことを確認するためのエラー チェックを提供し、ユーザーが印刷の向きを横に切り替えることを促し、Web ページからコンテンツに情報を提供するための技法を提供しています。
LAYOUTRECT 用の一時的なドキュメントの構築
この記事の最後として、Internet Explorer で現在選択されている項目だけを印刷するために、dialogArguments.__IE_ContentSelectionUrl プロパティを使用する方法を示します。これは有益な機能ですが、現在選択されていない項目を印刷する場合や、複数の連続していないセクションを印刷する場合はどうすればよいのでしょうか。
テンプレートは、現在表示されているページ __IE_BrowseDocument のドキュメント オブジェクトへの参照を保持しているので、その参照を使用して、元のオブジェクトから印刷する部分だけを抽出し、印刷する LAYOUTRECT 用の一時的なドキュメントを構築できます。document.createElement を使用して新しい BODY 要素を作成し、__IE_BrowseDocument を使用して、希望する要素から innerHTML を抽出します。さらに、作成した新しい BODY 要素にその innerHTML を挿入します。このテンプレートでは、Init 関数内で 6 回 for ループを使用して、段のコンテンツを取得しています。
for (i = 1; i <= 6; i++)
{
document.all("layoutrect" + i).onlayoutcomplete = OverflowChecker;
theBody = document.createElement("BODY");
theBody.innerHTML =
dialogArguments.__IE_BrowseDocument.all("layoutrect" + i).innerHTML;
FixImageURLs(theBody,
dialogArguments.__IE_BrowseDocument.all("layoutrect" + i));
document.all("layoutrect" + i).contentSrc = theBody.document;
}
また、テンプレートは透かし用のイメージを抽出し、ページごとに 1 つ、つまり
2 つの別の DEVICERECT 要素にそのイメージを配置しています。テンプレートは 8 つのセクションにパンフレット情報を抽出する必要はありません。パンフレットは、前半の DIV 全体と後半の DIV 全体から 2
つの操作だけでパンフレット情報を抽出できます。この方法を採用したのは、印刷テンプレートがパンフレットの任意の段でコンテンツのオーバーフローを"認識"し、オーバーフローが発生したときに視覚的にユーザーに警告するためです。
関数 FixImageURLs に注目してください。 document.createElement("BODY") を呼び出して作成したドキュメントは、ソース ドキュメントで指定された相対リンクやパスを解決するために、正しい URL ルートを使用しません。相対リンクやパスを解決しようとするときに、DLL へのパスを使用します。たとえば、theBody で graphics/globe1.gif への相対ソース パスを持つイメージへのパスは、res://brochuremachine/graphics/globe1.gif になる可能性があります。これは、要素が DLL によって作成されたことから分かります。FixImageURLs は、ソースから正しいパスを把握することによりこの問題を解決しています。
function FixImageURLs(oBody, oSourceDiv)
{
oBodyImgColl = oBody.document.all.tags("IMG");
oSourceDivImgColl = oSourceDiv.all.tags("IMG");
for (j = 0; j < oBodyImgColl.length; j++)
oBodyImgColl.item(j).src = oSourceDivImgColl.item(j).src;
}
この技法を使用して、印刷プレビュー モード中に LAYOUTRECT
コンテンツで動的な変更を行うことができます。行う必要のあることは、希望するコンテンツを持つ新しい BODY 要素を作成し、それを LAYOUTRECT
の contentSrc と置き換えるだけです。その変更は、印刷プレビュー ウィンドウにすぐに反映されます。
印刷テンプレートに情報を渡す
印刷テンプレートは、余白の設定と透かしの位置を調べるために、Web ページからの情報を必要とします。この情報を得るためにテンプレートは __IE_BrowseDocument
を詳しく調べることができますが、ここではテンプレートが必要とする情報を得る方法をもっと簡単にすることにしました。この方法、つまり Web ページと印刷テンプレート間で情報を受け渡しする方法を説明します。BrochureMachine.htm はドキュメント上で
brochureInfo を呼び出して expando オブジェクトを作成します。印刷プレビュー ウィンドウを開く直前 (つまり、LaunchPT を呼び出す直前)
に、Web ページは余白の設定や透かしの位置に対するさまざまなプロパティを持つこの expando オブジェクトを初期化します。印刷テンプレートは、__IE_BrowseDocument
からこの情報を読み取ることができます。
Brochure Machine サンプルは、この技法を使用して __IE_BrowseDocument
からプロパティを読み取るだけですが、これを使用する場合には次のようなたくさんの可能性があります。
- expando として Web ページ ドキュメント オブジェクトにアタッチされるオブジェクトは完全なオブジェクトです。このオブジェクトは、関数、配列、その他の種類のデータおよびネストされるオブジェクトを含むことができます。
- 印刷テンプレートは __IE_BrowseDocument に変更を加えることができます。これらの変更はブラウザにレンダリングされるドキュメントに直接影響します。
- また、新しい expando プロパティを印刷テンプレートのコードから
__IE_BrowseDocument にアタッチできます。印刷プレビュー ウィンドウを閉じるときに、これらのプロパティを Web ページで利用できます。ただし、これには 1 つの制限があり、expando オブジェクトを __IE_BrowseDocument にアタッチしている場合は、印刷テンプレートがアクティブなときのみ利用可能です。印刷テンプレートは作成するすべてのオブジェクトを所有します。印刷プレビュー ウィンドウを閉じた後、または印刷が完了した後は、テンプレート自身が破棄されるときに、テンプレートが作成したすべてのオブジェクトが削除されます。
ページの向きのチェック
印刷アーキテクチャにはページの向きの設定はありません。ページの向きを縦から横またはその反対に切り替えるときは、単にページの幅と高さのプロパティを入れ替えます。印刷テンプレートは、TemplatePrinter ビヘイビアの pageWidth プロパティが 1100 (ページの大きさは 100 分の 1 インチ単位であることを思い出してください)
で pageHeight が 850 であることを確認することにより、ページの向きと用紙サイズを確認します。プロパティの設定がこの値以外の場合、テンプレートは適切な警告を表示し、ユーザーがこの値を修正できるように [ページ設定 (Page Setup)] ダイアログ ボックスを開きます。
コンテンツ オーバーフローの警告
6 つの LAYOUTRECT 要素の onlayoutcomplete イベント
ハンドラは CheckOverflow という関数です。この関数は単純にイベント オブジェクトの contentOverflow プロパティを調べます。このプロパティが True の場合は、関数は段が含むコンテンツが多すぎることを警告し、その LAYOUTRECT
の境界線を点滅します。
結論
この記事と 「印刷プレビューを超えて : Internet Explorer 5.5 の印刷機能のカスタマイズ」 を組み合わせることにより、Internet Explorer 5.5 の新しい印刷アーキテクチャを使用したかなり注目できるアプリケーションを作成するために必要な知識を得たことになります。ここに記載したことより多くのことをこの記事から読み取って学習していただくことを期待しています。
Chuck Ainslie は、Internet Explorer SDK ドキュメント チームのプログラマ兼ライターで、Microsoft のカフェテリアの食事に関してめったに苦情をいうことはありません。彼がワーグナーのオペラのことで同僚を悩ませていないときは、シアトルのタンゴ ダンス場のどこかで彼を見つけることができます。ダンスフロアでめだっているのが彼です。
|