有没有办法在.Net(或WMI)中确定打印驱动程序在打印到文件时是否会打印为PCL、PostScript或XPS格式?
2 回答
如果您的目标操作系统是 Windows,另一种方法是在驱动程序和打印队列上执行一些逻辑。您可以使用 WMI/.NET API 来获取驱动程序 DLL 名称。如果是 unidrv.dll,那么驱动程序就是 PCL 驱动程序,如果是 pscript.dll,那么它就是 PS 驱动程序。当然,这适用于基于 MS Unidrv/PScript 驱动程序框架的驱动程序,但您会发现大部分已安装的基于驱动程序的驱动程序都是基于此框架的。
您应该能够通过 WMI 收集此信息。Win32_Printer.DefaultLanguage 应该返回这个值。如果我记得过去尝试过这个,许多打印机驱动程序不会返回值。
在这里查看:http: //msdn.microsoft.com/en-us/library/aa394363%28VS.85%29.aspx
像这样的“应该”做的伎俩:
System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");
ManagementObjectSearcher mos = new ManagementObjectSearcher(oq);
ManagementObjectCollection moc = mos.Get();
foreach( ManagementObject mo in moc )
{
string name = mo["Name"].ToString();
string language = mo["DefaultLanguage"].ToString();
MessageBox.Show(String.Format("Printer: {0} -- Language: {1}", name, language);
}
这将返回一个 UInt16,检查“默认语言”到英文术语的翻译链接,即:PCL、Postscript、HPGL 等。
我能问一下你为什么要事先确定输出是什么吗?如果它是打印到文件的过程,我只需查看输出并确定它是什么。大多数较新的打印驱动程序将像这样在作业顶部插入 PJL 语句
@PJL 输入语言 = "PCL"
或者只是查看代码本身的指示性指标,例如 PCL 或 Postscript 的 %PS 等。