Windows 7 および Windows Server 2008 R2 SP1 では、RD Easy Print でスケーリングがサポートされなくなりました。

こんにちは。

プラットフォームサポートの丸山です。

今日は、SP1 を適用した Windows 7 端末や Windows Server 2008 R2 端末に、リモートデスクトップ、または RemoteApp などを使用してログオンし、Easy Print でリダイレクトされたプリンターを使用するときの動作変更のお話です。

■ Windows 7 SP1 または Windows Server 2008 R2 SP1 の Easy Print プリンタードライバーの動作変更について

リモート デスクトップ接続または RemoteAppを利用して、別のコンピューターにログオンした場合、Easy Print プリンター ドライバーを使用して、クライアント端末のプリンターをサーバーで使えるようにプリンターのリダイレクトを行うことができます。

このとき、接続先のコンピューターが SP1 が適用された Windows 7 または Windows Server 2008 R2 環境である場合において、Easy Print を使用してリダイレクトされたプリンターでは、拡大、縮小印刷機能に使用される、スケーリング機能がサポートされなくなりました。

特に、Easy Print を使用した場合には、印刷設定画面はクライアント端末のプリンター設定画面が呼ばれるため、ユーザーはプリンタードライバーがサポートするすべての機能が問題なく動作することを期待しますが、仮にユーザーが印刷設定画面でスケーリングに関わる設定項目を変更した場合には、この値は単純に無視される動作となります。

■ Easy Print でスケーリングがサポートされなくなった変更の経緯について

まず、Easy Print の処理の流れについて確認しましょう。

以下の図は、Easy Print を使用したときの、印刷処理の簡単な流れですが、注目すべきポイントは、サーバーで実施された印刷処理が、クライアント端末にXPS形式で転送されるところです。

 

図 : Easy Print の処理の流れ

このとき、サーバー側で動作しているアプリケーションにて実行された印刷処理は、内部的に Microsoft XPS Document Converter (MXDC) の機能を使用して、一時ファイルとして使用する XPS 形式の印刷データを作成します。

Office などのアプリケーションでは、プリンター ドライバーがスケーリング機能をサポートしていない場合には、アプリケーション独自のスケーリング機能を使用して、印字結果がスケールされますが、プリンター ドライバーがスケーリング機能をサポートしている場合には、アプリケーション独自の機能ではなく、プリンター ドライバーのスケーリング機能を利用します。

しかしながら、Easy Print プリンター ドライバーが使用している MXDC は、拡大縮小印刷のためのスケーリング機能をサポートしていないため、アプリケーションが設定した拡大縮小印刷が意図した印刷結果とならない現象が報告されました。

確認されている影響としては、たとえば縮小印刷を実施した場合に用紙サイズよりも大きな印刷物を正しく取り扱えず、印字結果が欠けてしまう現象や、拡大印刷を実施した場合にプリンターの余白領域が考慮されず、印字位置がずれてしまう現象などが挙げられます。

このような問題について対応策を検討した結果、Easy Print プリンター ドライバーを使用する場合には、スケーリング機能が期待通りの出力結果とならないと判断し、スケーリング機能をサポートしないよう変更すべき、との結論に至りました。

以上のような状況から、SP1 が適用された Windows 7 または Windows Server 2008 R2 環境では、Easy Print を使用してリダイレクトされたプリンターでは、スケーリング機能をアドバタイズしないよう、変更されております。

この変更は、たとえばサーバー側で動作しているアプリケーションがリダイレクトされたプリンターに対して DeviceCapabilities 関数の問い合わせを実施した場合に、プリンターがスケーリング機能をサポートしていないことを示す応答が返されます。

また、アプリケーションが印刷時の DEVMODE の dmScale にスケーリング値を設定しても、最終的な印刷結果にはスケーリングの値が反映されません。

■ 本問題の回避策について

この動作変更による問題を回避するためには、以下のようなアイデアがあげられます。

1. アプリケーションが対応している場合、独自スケーリング機能を使用する

弊社 Office シリーズなどの一部のアプリケーションでは、プリンタードライバーがスケーリング機能をサポートしていないときに、アプリケーション独自のスケーリング機能が動作して、拡大、縮小印刷が可能となる場合があります。

お使いのアプリケーションが独自のスケーリング機能をサポートしている場合には、その機能を使用することで、問題の回避ができます。

2. サーバーに直接接続されたプリンターを利用する

サーバーとなる端末が近くにある場合や、利用者数が少ない状況では、あらかじめすべてのプリンター接続をサーバーに登録しておくことで、リダイレクトされたプリンターを使用した問題の発生を避けることができます。

3. 従来形式でリダイレクトされたプリンターを使用する

今回の動作変更の結果、Easy Print を使用した場合には、スケーリング機能が無効化されますが、クライアント環境にて動作しているプリンタードライバーがスケーリングをサポートしている場合には、従来形式のプリンターリダイレクトを使用することで、スケーリング機能が有効となります。

ただし、従来形式のリダイレクトを使用するには、クライアントで使用しているプリンタードライバを、サーバーとなるコンピューターにもあらかじめインストールしておく必要があります。

※ クライアント端末が 32bit で サーバー端末が 64bit である場合など、クライアント端末とサーバー端末の CPU アーキテクチャが違う場合には、それぞれのアーキテクチャ向けのプリンタードライバーをインストールしておく必要があります。

プリンタードライバーをインストールしていただき、サーバーとなるコンピューターにて以下のグループポリシーを [無効] に設定すると、Easy Print よりも、従来形式のプリンターリダイレクトが優先されるようになります。

[コンピューターの構成] ※または [ユーザーの構成]
  [管理用テンプレート]
   [Windows コンポーネント]
    [リモート デスクトップ サービス]
     [リモート デスクトップ セッション ホスト]
      [プリンターのリダイレクト]
       [リモート デスクトップ Easy Print プリンター ドライバーを最初に使う]

設定後の画面はこんな感じです。

図 : ポリシー設定変更後の画面

本ポリシー設定後、コンピューターを再起動すると、設定が反映されます。

■ 参考情報

ターミナル サービスの印刷機能
https://technet.microsoft.com/ja-jp/library/cc772270.aspx

TS RemoteApp
https://technet.microsoft.com/ja-jp/library/cc731340.aspx

■ 今後の展開について

今回の動作変更は、SP1 が適用された Windows 7 または Windows Server 2008 R2 のほか、Windows 7 RTM、Windows Server 2008 R2 RTM、Windows Vista SP2、Windows Server 2008 SP2 の最新のLDRブランチに反映されております。このため、これらのバージョンの Windows でも、今後リリースされる修正プログラムの適用や、サービスパックの適用などにより Easy Print の動作変更が反映される可能性があります。

なお、本動作変更につきましては、新しい情報があり次第、本ブログを更新していく予定です。