процесс всегда печатает документ на принтере по умолчанию - PullRequest
4 голосов
/ 08 декабря 2011

У меня проблема с выбором принтера для печати моего документа.

Мой код:

var filename = @"C:\Users\I\Desktop\test.doc";

PrintDialog pd = new PrintDialog();

pd.PrinterSettings =new PrinterSettings();

    if (DialogResult.OK == pd.ShowDialog(this))
    {
        Process objP = new Process();

        objP.StartInfo.FileName = filename;


        objP.StartInfo.WindowStyle =

        ProcessWindowStyle.Hidden; //Hide the window. 

        objP.StartInfo.Verb ="print";

          objP.StartInfo.Arguments ="/p /h \"" + filename + "\" \"" + pd.PrinterSettings.PrinterName + "\"";
        objP.StartInfo.CreateNoWindow = false;
        //true;//!! Don't create a Window. 
        objP.Start();
        //!! Start the process !!// 
        objP.CloseMainWindow();
    }

и что бы я ни выбрал, process всегда будет использовать принтер по умолчанию, независимо от значения pd.PrinterSettings.PrinterName.

Что не так с моим кодом?

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

Возможно, вы хотите использовать «PrintTo» вместо «print» для глагола. Вы уже установили objP.FileName в имя файла, поэтому нет необходимости усложнять аргументы. Передайте там только имя принтера.

var filename = @"C:\Users\I\Desktop\test.doc"; 

PrintDialog pd = new PrintDialog(); 

pd.PrinterSettings =new PrinterSettings(); 

if (DialogResult.OK == pd.ShowDialog(this)) 
{ 
    Process objP = new Process(); 

    objP.StartInfo.FileName = filename;
    objP.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //Hide the window.
    objP.StartInfo.Verb ="PrintTo";
    objP.StartInfo.Arguments = pd.PrinterSettings.PrinterName;
    objP.StartInfo.CreateNoWindow = false; 
    //true;//!! Don't create a Window.  

    objP.Start(); 
    //!! Start the process !!//  

    objP.CloseMainWindow(); 
}
2 голосов
/ 08 декабря 2011

Попробуйте изменить pd.PrinterSettings =new PrinterSettings();, чтобы прочитать что-то вроде этого:

pd.PrinterSettings =new System.Drawing.Printing.PrinterSettings; 

По умолчанию, когда вы создаете экземпляр настроек принтера, он возвращает имя принтера по умолчанию просто к сведению ... затем вы можете попробовать что-токак это

//sudu code
foreach(string strPrinter in PrinterSettings.InstalledPrinters)
{
 // or unless you know the name of the printer then skip this and assign it to the code above
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...