我有可以打印的服务。到目前为止,该服务已使用WPF System.Windows.Controls.PrintDialog.PrintDocument
方法进行打印,但是由于各种问题(性能,Windows更新错误,64位系统问题上的32位服务等),我正在转换为使用传统的System.Drawing.Printing.PrintDocument
方法。
该服务作为服务运行时,我希望始终使用默认的打印机首选项(包括诸如Intermec / Honewell PM43等工业标签打印机的介质设置和打印速度之类的内容)进行打印
以前我是使用PrintDialog.PrintTicket = PrintQueue.DefaultPrintTicket.Clone
但是我无法在System.Drawing.Printing.PrintDocument
中找到等效的方法,并且该服务没有按照打印机属性(在这种情况下,特别是“打印速度”)中设置的默认打印机首选项。
那么PrintDialog.PrintTicket = PrintQueue.DefaultPrintTicket.Clone
中的System.Drawing.Printing.PrintDocument
等于什么?
答案 0 :(得分:0)
以下问题帮助我找到了答案 Can't change DEVMODE of a printer
//Get the registry key containing the printer settings
var regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Print\\Printers\\" + PrinterName);
if (regKey != null)
{
//Get the value of the default printer preferences
var defaultDevMode = (byte[])regKey.GetValue("Default DevMode");
//Create a handle and populate
var pDevMode = Marshal.AllocHGlobal(defaultDevMode.Length);
Marshal.Copy(defaultDevMode, 0, pDevMode, defaultDevMode.Length);
//Set the printer preferences
pd.PrinterSettings.SetHdevmode(pDevMode);
//Clean up
Marshal.FreeHGlobal(pDevMode);
}