在现代办公环境中,自动化文档打印是一个常见的需求。本文将介绍如何通过编程实现自动化文档打印流程,包括获取打印机名称、文档标题、设置打印进程等步骤。
首先,需要获取默认打印机的名称。这可以通过创建一个打印对话框对象来实现。以下是实现此功能的C#代码示例:
private static void getPrinterName()
{
PrintDialog pt = new PrintDialog();
printerName = pt.PrinterSettings.PrinterName;
}
在上述代码中,创建了一个PrintDialog对象,并从中获取了打印机的名称。
接下来,需要获取PDF文档的标题。这可以通过使用iTextSharp库来实现。以下是实现此功能的C#代码示例:
private static void getDocumentTitle()
{
iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(printFileName);
documentTitle = reader.Info["Title"];
}
在上述代码中,创建了一个PdfReader对象,并从中获取了PDF文档的标题。
现在,需要将打印进程的主要元素组合在一起,并设置启动进程以使用Adobe,并传递文档位置和打印机作为参数。以下是实现此功能的C#代码示例:
private static void setProcess()
{
string flagNoSplashScreen = "/s /o";
string flagOpenMinimized = "/h";
var flagPrintFileToPrinter = string.Format("/t \"{0}\" \"{1}\"", printFileName, printerName);
var args = string.Format("{0} {1} {2}", flagNoSplashScreen, flagOpenMinimized, flagPrintFileToPrinter);
startInfo = new ProcessStartInfo
{
FileName = applicationPath,
Arguments = args,
CreateNoWindow = true,
ErrorDialog = false,
UseShellExecute = false,
Verb = "print",
WindowStyle = ProcessWindowStyle.Minimized,
RedirectStandardInput = true,
RedirectStandardOutput = false
};
}
在上述代码中,设置了启动进程的参数,包括不显示启动画面、最小化窗口、打印文件到打印机等。
为了获取Adobe应用程序的路径,需要从系统注册表中获取。以下是实现此功能的C#代码示例:
private static List> RegistrationKey;
private static string allocatedPath;
public static string Allocate()
{
createRegistrationKey();
getInstalledApplicationPath();
return allocatedPath;
}
private static void createRegistrationKey()
{
RegistrationKey = new List>();
RegistrationKey.Add(new Tuple("Adobe", @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Acrobat.EXE"));
RegistrationKey.Add(new Tuple("Adobe32", @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRD32.EXE"));
}
private static void getInstalledApplicationPath()
{
allocatedPath = string.Empty;
foreach (var s in RegistrationKey)
{
allocatedPath = getRegistryApplicationPath(s.Item2);
if (!string.IsNullOrEmpty(allocatedPath))
{
break;
}
}
}
private static string getRegistryApplicationPath(string applicationKey)
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(applicationKey);
if (key != null)
{
return key.GetValue("").ToString();
}
return String.Empty;
}
在上述代码中,首先创建了一个注册表键的列表,然后检查注册表以获取Adobe应用程序的路径。
最后,需要运行打印进程。以下是实现此功能的C#代码示例:
public static void Print(string path)
{
printFileName = path;
getDocumentTitle();
getPrinterName();
setTracking();
applicationPath = PDFLibrary.ApplicationEXEPath.Allocate();
if (!String.IsNullOrEmpty(applicationPath))
{
setProcess();
using (var process = Process.Start(startInfo))
{
process.CloseMainWindow();
process.Kill();
}
}
}