【发布时间】:2009-10-07 21:10:33
【问题描述】:
有没有办法在 .Net(或 WMI)中确定打印驱动程序在打印到文件时是否会打印为 PCL、PostScript 或 XPS 格式?
【问题讨论】:
标签: .net printing postscript printer-control-language
有没有办法在 .Net(或 WMI)中确定打印驱动程序在打印到文件时是否会打印为 PCL、PostScript 或 XPS 格式?
【问题讨论】:
标签: .net printing postscript printer-control-language
如果您的目标操作系统是 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 等。
【讨论】: