.NET打印。始终使用默认首选项

时间:2019-10-16 09:04:58

标签: c# .net vb.net printing

我有可以打印的服务。到目前为止,该服务已使用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等于什么?

1 个答案:

答案 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);
}