Ghostscript安装与使用指南

Ghostscript是一个开源的软件,用于处理PDF和PostScript文件。在Windows系统中,Ghostscript通常以gswin32c.exe的形式存在,并且需要正确安装才能使用。本文将介绍如何在Windows系统中找到Ghostscript的安装路径,并使用它来打印PDF文件。

查找Ghostscript程序

为了使用Ghostscript打印PDF文件,首先需要确定Ghostscript程序的安装路径。这可以通过查询Windows注册表来实现。注册表中包含了程序的安装信息,包括Ghostscript的路径。

注册表键池是一个包含Ghostscript安装路径可能性的列表。这个列表将用于查询注册表,以找到Ghostscript的确切位置。

private static void createRegistrationKey() { RegistrationKey = new List>(); RegistrationKey.Add(new Tuple("Ghost", @"SOFTWARE\GPL Ghostscript")); RegistrationKey.Add(new Tuple("Ghost", @"SOFTWARE\AFPL Ghostscript")); }

使用注册表键池中的数据,程序将检查注册表以找到Ghostscript的路径。Ghostscript的路径通常不在主键下,而是在子键中。

private static Tuple getRegistryApplicationPath(string keyTitle, string applicationKey) { RegistryKey key = Registry.LocalMachine.OpenSubKey(applicationKey); if (key != null) { if (key.ValueCount > 0) { return new Tuple(keyTitle, key.GetValue("").ToString()); } else if (key.SubKeyCount > 0) { foreach (var item in key.GetSubKeyNames()) { var inner = key.OpenSubKey(item); foreach (var valueInner in inner.GetValueNames()) { string inner1 = inner.GetValue(valueInner).ToString(); if (!inner1.Contains(".exe") && !inner1.Contains(".dll") && inner1.Contains("GPLGS")) { return new Tuple(keyTitle, Path.Combine(inner1, "gswin32c.exe")); } else if (inner1.Contains(".exe") || inner1.Contains(".dll")) { return new Tuple(keyTitle, Path.Combine(inner1)); } } } } } return new Tuple(String.Empty, String.Empty); }

程序将遍历注册表键池中的每个项目,以查看是否有注册表记录。

private static void getInstalledApplicationPath() { foreach (var s in RegistrationKey) { allocatedPath = getRegistryApplicationPath(s.Item1, s.Item2); if (!String.IsNullOrEmpty(allocatedPath.Item1)) { break; } } }

分配控制器方法

分配控制器方法控制分配逻辑。

public static Tuple Allocate() { createRegistrationKey(); getInstalledApplicationPath(); return allocatedPath; }

打印PDF文档

使用分配逻辑找到exe路径后,程序将文档发送到打印机,而不会出现任何弹出窗口。

创建ProcessStartInfo对象,以便GhostScript可以打印PDF。

private static void setProcess() { startInfo = new ProcessStartInfo(); startInfo.Arguments = String.Format("-dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=mswinpr2 -sOutputFile=\"\\\\spool\\{0}\" \"{1}\"", printerName, printFileName); startInfo.FileName = applicationPath; startInfo.UseShellExecute = false; }

获取Windows中默认打印机的名称。

private static void getPrinterName() { PrintDialog pt = new PrintDialog(); printerName = pt.PrinterSettings.PrinterName; }

创建控制进程,将PDF发送到打印机。

public static void Print(string path, string exePath) { var allocation = PDFLibrary.ApplicationEXEPath.Allocate(); printFileName = path; applicationPath = allocation.Item2; getPrinterName(); setTracking(); if (!String.IsNullOrEmpty(applicationPath)) { setProcess(); using (var process = Process.Start(startInfo)) { Console.WriteLine("Process started"); Console.WriteLine("Process Id: " + process.Id.ToString()); Console.WriteLine("Process Machine name: " + process.MachineName.ToString()); Console.WriteLine("Wait for Process to exit"); process.WaitForExit(); Console.WriteLine("Closing Process"); closeProcess(process); reJoinThread(); } } else { MessageBox.Show(LanguageHelper.GetString("dlgPDFViewer.CantFindPDFApplication"), "Health Options®", MessageBoxButtons.OK, MessageBoxIcon.Error); } }

尝试关闭主窗口并终止进程。

private static void closeProcess(Process process) { try { process.CloseMainWindow(); process.Kill(); } catch (Exception e) { } } private static void reJoinThread() { try { Console.WriteLine("Try and re-join the Tracking thread"); trackingThread.Join(); Console.WriteLine("Thread has ended"); } catch (Exception e) { } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485