2016-04-26 31 views
1

我正在使用GhostPrint來打印一個非常簡單的PDF文件。這只是一個頁面,有兩個字,有兩種不同的背景顏色。 PDF文件是86KB。 當我嘗試使用GhostScript打印它時,它會根據我的BitsPerPixel在17.5MB或95MB上創建一個打印作業。由於我想讓它變成彩色,我已經嘗試了4 BitsPerPixel和24 BitsPerPixel。如果我使用Adobe Reader打印相同的文件,打印作業大約200KB,並且我看不出打印質量有什麼不同。Ghostscript正在生成大文件

  string printerName = "Konica Minolta PS Color Laser Class Driver"; 
      string ghostScriptPath = "C:\\Program Files (x86)\\gs\\gs9.19\\bin\\gswin32c.exe"; 
      string pdfFilePath = "C:\\Users\\TestUser\\Documents\\ColorTest.pdf"; 
      arguments += " -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -BitsPerPixel=24 -dNumCopies=1 -sDEVICE=mswinpr2 -sOutputFile=\"\\\\spool\\" + printerName + "\" \"" + pdfFilePath + "\" "; 
      ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.Arguments = arguments; 
      startInfo.FileName = ghostScriptPath; 
      startInfo.UseShellExecute = false; 

      startInfo.RedirectStandardError = true; 
      startInfo.RedirectStandardOutput = true; 

      Process process = Process.Start(startInfo); 
      Console.WriteLine(process.StandardError.ReadToEnd() + process.StandardOutput.ReadToEnd()); 
      process.WaitForExit(30000); 

      if (process.HasExited == false) 
      { 
       process.Kill(); 
      } 
      Console.WriteLine("Exitcode: " + process.ExitCode); 
      Console.ReadLine(); 

我怎樣才能減少文件大小,而不會失去太多的質量: 我通過一個C#控制檯應用程序使用下面的代碼打印?我希望Adobe Reader可以做到這一點。

PS。我知道在窗口隱藏等情況下使用Adobe Reader,但在我的用例中不起作用,因爲我需要能夠指定要使用的打印機,雙面/單面,彩色/灰色和副本數量。

回答

2

mswinpr2設備通過以選定打印機的分辨率和顏色深度將輸入呈現爲位圖來工作。 PDF當然是(至少是潛在的)矢量格式,因此可以保存更緊湊的表示。

還有沒有在一般情況下從Ghostscript打印到Windows打印機並且沒有渲染內容的方式,因此無法創建較小的文件。當然,由於您正在打印到PostScript打印機(從您的打印機名稱猜測),您可以使用ps2write設備而不是mswinpr2。由於PostScript也是一種矢量格式,因此它更加緊湊。但是,那麼您將不會使用mswinpr2設備,並且您必須自行將生成的PostScript文件發送到打印機。

我有點驚訝,你發現一箇中間假脫機文件的大小是一個問題。您始終可以將輸出直接發送到打印機,而不是使用%printer%語法對其進行假脫機。

+0

感謝您的回覆。文件大小的問題是打印需要很長時間,特別是如果PDF更大。我將如何去發送Postscript文件到C#打印機? – timsuldat

+1

從命令行「copy/b device:」其中是文件和設備的名稱:是設備所在端口的名稱。/b表示以二進制形式複製。我不知道如何從C#中完成它,我不是C#開發人員。當然,打印需要很長時間,您在主機上渲染位圖並將其發送到打印機,如果您發送PostScript,那麼繁重的工作將卸載到打印機,該打印機針對該任務進行了優化,即使它具有可用資源較少。 – KenS

+0

嗨,KenS。再次感謝您的回覆。使用這個,我可以更快地將它打印到打印件上。但是有一個問題。 它不是以雙面打印,即使我已經在創建ps文件時指定了-dDuplex。 Im使用: -sProcessColorModel = DeviceGray -sColorConversionStrategy = Gray -r300 -dSAFER -dBATCH -dNOPAUSE -dDuplex -sDEVICE = ps2write -sOutputFile = C:\\ Users \\ Soren \\ Documents \\ test.ps C:\\ Users \\ Soren \\ Documents \\ DuplexTest.pdf「。 您知道如何通過Ghostscript創建Postscript文件,並將其複製到打印機時進行雙面打印嗎? – timsuldat