2017-12-22 13 views
1

내 프로젝트에서 네트워크를 통해 PDF 파일을 인쇄하기 위해 Ghostscript.NET을 사용하고 있습니다. 로컬로 잘 작동, 윈도우 10, 버전 64 비트 및 Ghostscript 드라이버를 사용하여 https://www.ghostscript.com/download/gsdnld.html에서 다운로드 한 32 비트 (Windows 32 비트 용 Ghostscript 9.22). 32 비트 버전을 설치하는 동기는 예외입니다Ghostscript.Net이 Windows Server 2012 R2에서 작동하지 않습니다.

Ghostscript.NET.GhostscriptLibraryNotInstalledException :이 관리되는 라이브러리가 32 비트 프로세스에서 실행하고이 시스템에서 32 비트 고스트 원시 라이브러리를 설치해야한다! 적절한 Ghostscript 기본 라이브러리를 다운로드하려면 Ghostscript 64 비트 드라이버를 사용할 때 응용 프로그램 로그에 나타나는 http://www.ghostscript.com/download/gsdnld.html

을 방문하십시오.

내 응용 프로그램을 게시 한 대상 운영 체제는 Windows Server 2012 R2입니다. 동일한 Ghostscript 드라이버 (Windows 32 비트 용 Ghostscript 9.22)를 사용하면 응용 프로그램에 대한 응답없이 인쇄 명령 루프가 무기한으로 반복됩니다.

방화벽과 바이러스 백신을 사용하지 않도록 설정하여 루프 원인이 될 가능성을 제거했습니다.

내 응용 프로그램은 디스크에서 pdf 파일을 읽고 Ghostscript를 사용하여 네트워크 프린터로 보냅니다. 프로세스를 시뮬레이션하기 위해 TeamViewer를 사용하여 원격으로 클라이언트 시스템에 연결합니다. 따라서이 컴퓨터에서 파일을 디스크에 저장하고 Ghostscript를 사용하여 네트워크 프린터에서 문서를 인쇄하는 REST 웹 서비스를 호출합니다.

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 보안 아키텍처에서는 Asp Net API가 가장을 사용하지 않고 COM 장치를 프린터로 직접 액세스 할 수 없습니다. 타사 라이브러리와 IIS 사용자로 더 높은 수준의 인트라넷 사용자가있는 컴퓨터에 연결된 로컬 프린터를 사용하여 시스템에서 파일을 인쇄했습니다. 가장 좋은 대답은 (필자의 의견으로는, 소스 코드 구현, 내 의견으로는 분명히 재사용이 가능하며, 필자의 필요에 따라 큰 "리팩토링 노력"없이는 COM 장치에 액세스 할 수있는 관리자 사용자로 설치되는) Windows 서비스 프로그램을 개발하여 디렉토리에 저장하고 Adobe Reader와 같은 다른 프로그램을 사용하여 컨텐츠를 프린터로 보냅니다. 실제 시나리오의 대상 프린터는 로컬 프린터가 아닌 IP 프린터였습니다.