有没有办法在.Net(或WMI)中确定打印到文件时打印驱动程序是打印到PCL还是PostScript或XPS格式?
答案 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等。