Ghostscript正在制作大量文件

时间:2016-04-26 08:02:47

标签: c# pdf printing ghostscript

我使用GhostPrint打印一个非常简单的PDF文件。它只有一页,有2个单词,有两种不同的背景颜色。 PDF文件是86KB。 当我尝试使用GhostScript打印它时,它会创建一个17.5MB或95MB的打印作业,具体取决于我的BitsPerPixel。由于我希望它是彩色的,我尝试了4个BitsPerPixel和24个BitsPerPixel。如果我使用Adobe Reader打印相同的文件,printjob大约200KB,我发现打印质量没有差异。 我使用以下代码通过C#控制台应用程序进行打印:

            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();

如何在不损失太多质量的情况下减少文件大小?我希望Adobe Reader能够做到这一点。

PS。我知道在隐藏窗口时使用Adobe Reader但在我的用例中不起作用,因为我需要能够指定使用哪种打印机,双面/单面,颜色/灰色和份数。 / p>

1 个答案:

答案 0 :(得分:2)

mswinpr2设备的工作原理是将输入呈现为所选打印机的分辨率和颜色深度的位图。 PDF当然是(至少可能)一种矢量格式,因此可以保持更紧凑的表示。

在一般情况下,有一种没有方式从Ghostscript打印到Windows打印机而没有呈现内容,因此无法创建较小的文件。当然,由于您要打印到PostScript打印机(从您的打印机名称猜测),您可以使用ps2write设备而不是mswinpr2。由于PostScript也是矢量格式,因此它更紧凑。但是你不能使用mswinpr2设备,你必须自己将生成的PostScript文件发送给打印机。

我发现中间假脱机文件的大小有问题,我感到有些惊讶。您始终可以将输出直接发送到打印机,而不是使用%printer%语法将其假脱机。