Reporting Services のレポートで印刷を行うと「クライアントの印刷コントロールを読み込めません。」のエラーが発生する

森  隆博
SQL Developer Support Engineer

Reporting Services のレポートで印刷を実施した場合に以下のエラーが発生することがあります。

--------
クライアントの印刷コントロールを読み込めません。
--------

Reporting Services の印刷は RSClientPrint という ActiveX コントロールを使用します。
RSClientPrint は印刷を操作するクライアントにインストールされ、実行されますが、RSClientPrint がうまくインストールできなかったり、インストール済みの RSClientPrint に問題があった場合にこのエラーが発生します。
エラーが発生するパターンは複数ありますので、トラブル時に注目すべき点を考慮し、各種パターンを紹介します。

 

RSClientPrint ActiveX コントロールの killbit 設定

<要因>
ActiveX 用の累積的なセキュリティ更新プログラムのインストールに関係して、本現象が発生することがあります。
ActiveX 用の累積的なセキュリティ更新プログラムによって、古いバージョンの RSClientPrint ActiveX コントロールに killbit が設定されるため、レポート印刷時に ActiveX コントロールをロードできないことに起因しています。

<回避策>
この原因に起因している場合、killbit が設定される古いバージョンの RSClientPrint ActiveX コントロールを使用せずに、新しいバージョンの RSClientPrint を使用すれば問題が解決できます。
ご利用の Reporting Services に対して最新の更新プログラムを適用することをお勧めします。

RSClientPrint はサーバーの Reporting Services に配置されており、Reporting Services の更新プログラムに RSClientPrint のモジュールが含まれている場合、更新プログラムの適用によりサーバー上の RSClientPrint が置き換わります。
クライアントから印刷を行おうとする際、サーバーに新しい RSClientPrint が存在していていれば新たにダウンロード画面が表示され、クライアントに RSClientPrint をインストールすることができます。

<参考情報>
https://support.microsoft.com/kb/967511/en-us

 

IE の 64-bit/32-bit と Reporting Services のバージョンの組み合わせに起因している

<要因>
RSClientPrint は ActiveX コントロールであり、IE のアドオンとして実装されています。
Internet Explorer のアドオンとは、Internet Explorerに追加でインストールされるプログラムのことです。
IE に追加でインストールされるため、IE が 64-bit の場合は 64-bit 用の RSClientPrint が必要になります。

64-bit 用の RSClientPrint には SQL Server 2008 のバージョンから対応しています。
SQL Server 2008 は接続してきたクライアント IE が 64-bit なのか 32-bit なのかを判断し、適切な RSClientPrint を返す仕組みを実装しました。

<回避策>
上記要因に起因している場合、以下のいずれかで回避することができます。

・32-bit の IE を使用する。
・64-bit の IE にも対応した Reporting Services 2008 以降のバージョンを使用する。

<注意事項>
レポートの参照方法には以下のパターンがあります。

a) レポートサーバー(https://MachineName/ReportServer)やレポート マネージャー(https://MachineName/Reports)を利用する。
b) ReportViewer コントロールを VB や C# のアプリケーションに組み込んで利用する。

先の要因と回避策は、a) の場合について説明しています。
b) の ReportViewer Web コントロールを組み込んだ Web アプリケーションに対してクライアントから接続し、レポートを印刷する場合は注意が必要です。
Visual Studio 2008 までの ReportViewer Web コントロールには、アプリケーションを利用するクライアントの環境を判断する機能がないため、64-bit IE から Web アプリケーションへ接続した場合、印刷を行うことができません。
Visual Studio 2010 の ReportViewer コントロールではその機能が実装されましたので、64-bit IE からの印刷機能利用の場合には、Visual Studio 2010 での開発が必要です。

 

GDI+ のバージョンが古い

<要因>
IE を起動するクライアント OS が Windows 2000 だった場合 GDI の dll が古いことが考えられます。
GDI は Windows でグラフィック処理を行うプログラムです。
印刷実行時、GDI に対して処理を依頼しますが、この dll が古いバージョンであると印刷を処理できずにエラーが発生することが報告されています。

<回避策>
新しいバージョンの GDI+ を使用します。

GDI+ は以下の URL からダウンロードすることができます。

https://www.microsoft.com/downloads/details.aspx?FamilyId=6A63AB9C-DF12-4D41-933C-BE590FEAA05A

ダウンロードした exe ファイルを実行すると、自動解凍がはじまるので回答先のフォルダを指定します。
解凍したフォルダ配下の \asms\10\msft\windows\gdiplus から 「gdiplus.dll」をコピーし、以下のフォルダに貼り付けます。
 
c:\WINNT\system32
 
※すでに c:\WINNT\system32 配下に同名のファイルがある場合、もともと存在するファイルをバックアップすると後で元に戻すことができます。

<参考情報>
Windows 2000 は、すでにプロダクト サポート ライフサイクル期間を終了しております。
詳細につきましてはマイクロソフト プロダクト サポート ライフサイクルの情報をご覧ください。

マイクロソフト プロダクト サポート ライフサイクル
https://support.microsoft.com/lifecycle/?c1=509