2017-12-22 47 views
1

私のプロジェクトでGhostscript.NETを使用して、ネットワーク経由でPdfファイルを印刷しています。 Windows 10、バージョン64-Bit、Ghostscript Driverを使って、https://www.ghostscript.com/download/gsdnld.htmlからダウンロードした32-bit(Ghostscript 9.22 for Windows 32-bit)を使って、ローカルでうまく動作します。 32ビット版をインストールするための動機は例外で、Windows Server 2012 R2でGhostscript.Netが動作しない

Ghostscript.NET.GhostscriptLibraryNotInstalledException:この管理ライブラリは、32ビットプロセスの下で実行されていると、このマシンでの32ビットGhostscriptのネイティブライブラリのインストールを必要としています!適切なGhostscriptのネイティブライブラリをダウンロードするにはご覧ください。http://www.ghostscript.com/download/gsdnld.html

を、Ghostscriptの64ビットドライバを使用するときに自分のアプリケーションログに発生します。

私が自分のアプリケーションを公開した対象オペレーションシステムは、Windows Server 2012 R2です。同じGhostscriptドライバ(Ghostscript 9.22 for Windows 32-bit)を使用すると、アプリケーションに応答せずにprintコマンドループが無期限にループします。

この目的のために、私はファイアウォールとウイルス対策を無効にしてループの原因となる可能性を排除しました。

私のアプリケーションは、ディスクからpdfファイルを読み取り、Ghostscriptを使用してネットワークプリンタに送信します。プロセスをシミュレートするため、TeamViewerを使用してクライアントマシンにリモート接続します。したがって、このマシンからファイルをディスクに保存し、Ghostscriptを使用してネットワークプリンタで文書を印刷するREST Webサービスを呼び出します。

try 
       { 
        var task = Task.Run(() => 
        { 
         using (GhostscriptProcessor processor = new GhostscriptProcessor(GhostscriptVersionInfo.GetLastInstalledVersion(), true)) 
         { 
          List<string> switches = new List<string>(); 
          switches.Add("-empty"); 
          switches.Add("-dPrinted"); 
          switches.Add("-dBATCH"); 
          switches.Add("-dNOPAUSE"); 
          switches.Add("-dNOSAFER"); 
          switches.Add("-dPDFFitPage"); 
          switches.Add("-dNumCopies=" + numCopias); 
          switches.Add("-sDEVICE=mswinpr2"); 
          switches.Add("-sOutputFile=%printer%" + "\\\\" + printerIP + "\\" + printerNAME); 
          switches.Add("-f"); 
          switches.Add(inputFile); 

          processor.StartProcessing(switches.ToArray(), null); 
         } 
        }); 

        if (!task.Wait(TimeSpan.FromSeconds(Int32.Parse(ConfigurationManager.AppSettings["MAX_PRINTER_DELAY"])))) 
        { 
         Log.Info(String.Format("A impressão do arquivo ({0}) ({1}) foi encerrada porque ultrapassou MAX_PRINTER_DELAY = {2}!", inputFile, printerNAME, ConfigurationManager.AppSettings["MAX_PRINTER_DELAY"])); 
        } 

       } 
       catch (GhostscriptLibraryNotInstalledException e) 
       { 
        Log.Info("O GhostScript não está instalado."); 
        Log.Error(e); 
       } 
       catch (GhostscriptException e) 
       { 
        Log.Info("O GhostScript apresentou erro."); 
        Log.Error(e); 
       } 
       catch (Exception exception) 
       { 
        Log.Error(exception); 
       } 

私はGhostscript.NETバージョン1.2.1.0を使用しています。

誰かが私を助けることができますか?

答えて

0

Microsoft Windowsセキュリティアーキテクチャでは、Impersonationを使用せずにAsp Net APIがCOMデバイスに直接プリンタとしてアクセスすることはできないようです。サードパーティのライブラリと、IISユーザーとしてイントラネットユーザーのレベルが高いコンピュータに接続されたローカルプリンタを使用すると、ファイルが印刷されます。最高の答え(私の意見では、私の意見では、私の必要性に応じて、大きな「リファクタリング努力」がなければ、明確かつ再利用可能)は、COMサービスにアクセスできる管理者ユーザーとしてインストールされたWindowsサービスプログラムを開発して取得しました。別のプログラムを使用してAdobe Readerとしてコンテンツをプリンタに送信します。私の本当のシナリオの対象プリンタは、ローカルプリンタではなくIPプリンタでした。

関連する問題