2017-02-14 10 views
0

GhostScript.NET을 사용하여 PDF 문서를 인쇄하는 기능이 있습니다. 한 사용자가 인쇄하려고하면 모든 것이 올바르게 작동하지만 여러 사용자가 동시에 인쇄하려고하면 모든 문서가 인쇄되지 않습니다. 다중 동시 인쇄를 달성하기 위해 고스트 스크립트의 인스턴스를 여러 개 만들 계획입니다. 사용자의병렬 루프가있는 GhostScript의 여러 인스턴스를 사용하여 인쇄하려고합니다.

Ghostscript.NET Multithreading Issue

하나는 병렬 forloop를 만들라고,하지만 난 솔직히 고스트 스크립트의 인스턴스의 정확한 양을 생성하도록 하나를 구성하는 방법을 잘 모르겠어요 : 나는이 질문에 건너왔다. 어떤 도움을 크게 감상 할 수

public static void PrintFormPdfData(byte[] formPdfData, string printer) 
    { 
     var filename = @"C:\TEMP\report.pdf"; 
     using (var file = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) 
     { 
      file.Write(formPdfData, 0, formPdfData.Length); 
      using (GhostscriptProcessor processor = new GhostscriptProcessor()) 
      { 
       List<string> switches = new List<string>(); 
       switches.Add("-empty"); 
       switches.Add("-dPrinted=false"); 
       switches.Add("-dBATCH"); 
       switches.Add("-dPDFFitPage"); 
       switches.Add("-dNOPAUSE"); 
       switches.Add("-dNOSAFER"); 
       switches.Add("-dNumRenderingThreads=3"); 
       switches.Add("-dNumCopies=1"); 
       switches.Add("-sDEVICE=mswinpr2"); 
       switches.Add("-sOutputFile=%printer%" + printer); 
       switches.Add(filename); 
       try 
       { 
        processor.StartProcessing(switches.ToArray(), null); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.Message); 
       } 
       finally 
       { 
        File.Delete(filename); 
       } 
      } 
     } 
    } 

:

나는 주요 기능을 가지고있다. 코드의 문제는 당신이를 사용하고

public static void PrintingQueue(Queue<byte[]> printQueue, string printer, int copies) 
    { 
     Parallel.ForEach(printQueue, (currentFile) => 
     { 
      currentFile = printQueue.Dequeue(); 
      PrintFormPdfData(currentFile, printer, copies); 
     }); 
    } 

    private static void PrintFormPdfData(byte[] pdfFormBytes, string printer, int copies) 
    { 
     var fileName = Path.GetTempFileName(); 
     using (var file = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite)) 
     { 
      file.Write(pdfFormBytes, 0, pdfFormBytes.Length); 
      using (GhostscriptProcessor processor = new GhostscriptProcessor()) 
      { 
       List<string> switches = new List<string>(); 
       switches.Add("-empty"); 
       switches.Add("-dPrinted"); 
       switches.Add("-dBATCH"); 
       switches.Add("-dPDFFitPage"); 
       switches.Add("-dNOPAUSE"); 
       switches.Add("-dNOSAFER"); 
       switches.Add("-dNumRenderingThreads=3"); 
       switches.Add("-dNumCopies=1"); 
       switches.Add("-sOutputFile=%printer%" + printer); 
       switches.Add("-sDEVICE=mswinpr2"); 
       switches.Add(fileName); 
       try 
       { 
        processor.StartProcessing(switches.ToArray(), null); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.Message); 
       } 
       file.Close(); 
      } 
      File.Delete(fileName); 
     } 
    } 
+0

입니다 : – VMAtm

+0

예. – Crumblenautjs

답변

0

나는 여기에 또한 고스트 스크립트의 여러 인스턴스를 실행에 관심이 누군가를 위해 내 업데이트 된 코드의 ... 병렬를 ForEach를 사용하는 방법을 알아 냈어 모든 발신자에 대해 동일한 파일 경로 예 아래에이를 수정했습니다.