即使指定了printervname,也始终打印到默认打印机

时间:2014-03-26 06:01:37

标签: c# printing


我创建了一个Windows应用程序,我需要在其中静默打印PDF文件。

string printername="jn-01";

        if (printername != "NULL")
        {
            using (PrintDialog pd = new PrintDialog())
            {
                pd.PrinterSettings.PrinterName = printername;
                MessageBox.Show(printername);

                pd.PrinterSettings.Copies = 1;
                if (pd.PrinterSettings.IsValid)
                {
                    ProcessStartInfo info = new ProcessStartInfo(e.FullPath);
                    info.Verb = "PrintTo";
                    info.CreateNoWindow = true;
                    info.WindowStyle = ProcessWindowStyle.Hidden;
                    Process.Start(info);
                }
            }

我使用上面的代码进行打印。但系统始终打印到默认的ptinter 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您正在打印对话框中设置打印机名称,但您没有使用打印对话框进行打印。请注意打印时如何从不使用pd。您正在使用ShellExecute动词执行PDF文件(有效地使用PrintTo)。现在PrintTo动词支持提供打印机名称作为命令行参数。您可以在info.Arguments上进行设置。但是,要使其工作,处理PDF文件的默认应用程序需要支持它。有关这些动词的更多信息,请参阅this page

如果默认的PDF应用程序不支持此功能,那么您可以选择在打印前调用SetDefaultPrinter,然后在打印后将其恢复为之前的值(使用GetDefaultPrinter查找哪一个是默认第一)。请注意,这会更改用户的默认打印机,因此在执行此操作时不应该是默认选项。