有没有办法在.Net(或WMI)中确定打印驱动程序在打印到文件时是否会打印到PCL或PostScript格式?

时间:2009-10-07 21:10:33

标签: .net printing postscript printer-control-language

有没有办法在.Net(或WMI)中确定打印到文件时打印驱动程序是打印到PCL还是PostScript或XPS格式?

2 个答案:

答案 0 :(得分:1)

如果您的目标操作系统是Windows,则还有一种方法是在驱动程序和打印队列上执行某些逻辑操作。您可以使用WMI / .NET API来获取驱动程序DLL名称。如果它是unidrv.dll,则驱动程序是PCL驱动程序,如果它是pscript.dll,则它是PS驱动程序。当然,这适用于基于MS Unidrv / PScript驱动程序框架的驱动程序,但您会发现大多数已安装的驱动程序都基于此框架。

答案 1 :(得分:0)

您应该可以通过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 ENTER LANUGAGE =“PCL”

或者只是查看代码本身的指示符,例如for PCL或%PS for Postscript等。