2017-12-29 10 views
0

pdfs에서 prn 코드를 생성하고 프린터로 전송하여 C# 코드로 인쇄 작업을 자동화합니다. 이렇게하기 위해 다음 매개 변수와 함께 고스트 스크립트를 사용합니다.고스트 스크립트가 PRN 파일의 올바른 정보를 반영하지 않습니다.

gswin32c -dNOPAUSE -dBATCH -sDEVICE=laserjet -sOutputFile="c:/temp/out.prn" "NumberedPages.pdf" 

enter image description here

이 명령 줄 인수 out.prn라는 PRN 파일을 생성합니다. 이 파일을 다음 C# 코드로 프린터로 보내면 pdf 파일이 성공적으로 인쇄됩니다.

public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount) 
     { 
      uint returnedValue = 0; 
      Int32 dwError = 0, dwWritten = 0; 
      IntPtr hPrinter = new IntPtr(0); 
      DOCINFOA di = new DOCINFOA(); 
      bool bSuccess = false; // Assume failure unless you specifically succeed. 

      di.pDocName = "My C#.NET RAW Document"; 
      di.pDataType = "RAW"; 

      // Open the printer. 
      if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero)) 
      { 
       // Start a document. 
       returnedValue = StartDocPrinter(hPrinter, 1, di); 

       if (0 != returnedValue) 
       { 
        // Start a page. 
        if (StartPagePrinter(hPrinter)) 
        { 
         // Write your bytes. 
         bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten); 
         EndPagePrinter(hPrinter); 
        } 
        EndDocPrinter(hPrinter); 
       } 
       ClosePrinter(hPrinter); 
      } 
      // If you did not succeed, GetLastError may give more information 
      // about why not. 
      if (bSuccess == false) 
      { 
       dwError = Marshal.GetLastWin32Error(); 
      } 
      return bSuccess; 
     } 

(https://stackoverflow.com/a/29564132/3079364)

나는 또한 그들이 성공적으로 프린터 여부를 인쇄하는 경우 인쇄 작업을 모니터링 할

. 그러나 고스트 스크립트에 의해 생성 된 prn 파일은 정확한 페이지 수를 반영하지 않습니다. CZ 인쇄 작업 추적기 페이지의 정확한 수를 보여줍니다 내가 Word 또는 어도비을 사용하여이 문서를 인쇄 할 때 CZ 인쇄 작업 추적기

에서 캡처 한 Printed by ghostscript

아래를 참조하십시오.

When printed by Word

나는이 정보를 수정 유령 스크립트 명령에 추가 할 수있는 모든 매개 변수가 있습니까?

답변

2

출력 파일은 레이저젯 장치가 이해하기 때문에 단순히 PCL 파일입니다. 여기에는 파일의 페이지 수에 대한 정보가 없습니다.

인쇄 스풀러가 페이지가 하나만 있다고 생각하는 이유는 다른 말을하지 않았기 때문입니다. 파일을 열고 페이지를 시작한 다음 내용을 프린터에 직접 분출 한 경우 스풀러가 각 페이지의 시작 및 중지 위치를 알려주지 않으면 스트림에 포함 된 페이지 수를 알 수 없습니다.

StartPagePrinter를 한 번 호출하면 인쇄 스풀러가 부적절하게 페이지가 하나만 있다고 가정합니다. 각 페이지에 대해 StartPagePrinter 및 EndPagePrinter를 한 번 호출하면 올바른 페이지 수를 얻게됩니다. 물론, 이것은 Ghostscript가 출력하는 파일에서 각 페이지가 어디서 시작하고 끝나는지를 알고 있다는 것을 의미합니다.

OutputFile에 % d 형식을 사용하여 페이지 당 하나의 파일을 생성하는 것이 가장 좋을 것입니다. 그러면 페이지 계산이 정확할 것입니다.

데이터를 프린터로 직접 보낼 때 인쇄 스풀러에 몇 개의 페이지가 있는지 알 수있는 방법이없는 것처럼 보입니다. 인쇄 스풀러가 실제로 포함되지 않았기 때문에 그리 놀라운 일은 아닙니다.

관련 문제