4

サーバー側のワード文書をネットワークプリンターに印刷する必要があります。私の Web ページは、ドキュメントとファイルの場所をサーバーに送信して、差し込み印刷アイテムを開いて置換し、優先 (デフォルトではない) ネットワーク プリンタでドキュメントを印刷します。Web ページで選択されたドキュメントが変更されると、優先プリンター名が変更されます

Windows Server 2008 R2 で Word 14.0 オブジェクト ライブラリ、Asp.Net MVC 4.0、.Net Framework 4.0、IIS 7 を使用しています。IIS で、特定のアカウント ID (accountName@DomainName) で実行されるアプリ プールを作成しました。ユーザー プロファイルを true に設定して読み込み、ネットワーク プリンター接続をレジストリに読み込みます。COM 相互運用サービスという単語を実行する権限をアカウントに許可しました。ドキュメントを開き、差し込み印刷フィールドを置き換えて、pdf として保存し、ファイルを電子メールの添付ファイルとして送信することに成功しました。

word アプリケーションのActivePrinterプロパティには既定のプリンターがあるため、既定のプリンターにも印刷できます。しかし、私の最終的な目標は、単語アプリケーションとアクティブなドキュメントを閉じる前に、優先ネットワーク プリンターに単語を印刷することです。

ActivePrinterプロパティを変更しようとすると、次の 2 つのメソッドで例外が発生していました。

Word.Application wordApp = new Word.Application();

最初の方法:

wordApp.ActivePrinter = "preferredPrinterName"; 

第二の方法;

object[] oWordDialogParams = { "\\<serverName>\<PrinterName>", true };
string[] argNames = { "Printer", "DoNotSetAsSysDefault" };
object wordBasic = wordApp.WordBasic;

wordBasic.GetType().InvokeMember("FilePrintSetup"
           , System.Reflection.BindingFlags.InvokeMethod
           , null
           , wordBasic
           , oWordDialogParams
           , null
           , null
           , argNames);

Word アプリケーション オブジェクトが、ユーザー アカウントにインストールされているすべてのプリンターを読み込んでいないことがわかりました。デフォルトのプリンターのみをロードします。設定しようとしているプリンターがアクティブなプリンターのリストに見つからなかったため、上記の 2 つのメソッドが優先プリンターをアプリケーション オブジェクトに変更または追加しようとしたときに、例外が発生したと想定しています。

Word アプリケーション オブジェクトにロードされたユーザー プロファイルの下にインストールされているすべての共有プリンターを取得するにはどうすればよいですか?

4

1 に答える 1