2011-12-20 2 views
1

У меня есть приложение WPF со списком документов. Я создал кнопку «Распечатать все», которая отправляет все документы на мой принтер по умолчанию. Я хочу дать пользователю возможность выбрать принтер, а затем отправить все документы на этот принтер.Как выбрать принтер для нескольких документов?

Но как показать диалог печати и сохранить информацию о принтере? И как я могу печатать на конкретном принтере после закрытия диалога?

У меня есть это в моей функции печати, и это работает отлично (но для неправильного принтера)

var p = new Process 
{ 
    StartInfo = new ProcessStartInfo 
    { 
     CreateNoWindow = true, 
     Verb = "print", 
     FileName = filePath 
    } 
}; 
p.Start(); 

ответ

1

Вы могли бы использовать PrintDialog

Шаблон общего пользования будет

PrintDialog dialog = new PrintDialog(); 
if (dialog.ShowDialog() == true) 
{ 
    dialog.PrintVisual(visual, "Job Name"); 
    //dialog.PrintDocument(paginator, "Document Name"); 

} 

Если вы хотите распечатать файл, вам необходимо загрузить файл и создать DocumentPaginator. Как это сделать, зависит от формата файла, который вы пытаетесь распечатать.

+0

Хорошо, это решение paginator лучше, чем использование ProcessStartInfo с Verb = "printTo"? – Skywise

+0

Зависит от того, что вы подразумеваете под улучшением. Он позволяет вам делать больше, например, «Предварительный просмотр» и т. Д., И позволяет пользователю устанавливать параметры печати (это то, что вам нужно). – Ray

+0

Хорошо, спасибо Рэй. Параметры печати хороши. Я предполагаю, что предварительный просмотр является довольно проблематичным с несколькими документами. Кроме того, мое простое решение, похоже, часто оставляет читатель Acrobat открытым после печати последнего документа. Я посмотрю на страницу. – Skywise

0

Это только ключ и не полный ответ, но я думаю, что это могло бы помочь.

Вы можете распечатать принтеры и изменить принтер по умолчанию с помощью реестра Windows.

Посмотрите here и here.

Вы можете читать и записывать в реестр с помощью .NET framework простым способом.

+0

Спасибо за отзыв, но я ' d хотел бы избежать изменения принтера по умолчанию если возможно – Skywise

2

Благодаря Ray для большой помощи.

Следующий способ отлично подходит для выбора принтера. Очередь принтера записывается, когда пользователь нажимает «Печать» в диалоговом окне печати.

public PrintQueue SelectPrinter() 
{ 
    var dialog = new PrintDialog(); 
    if (dialog.ShowDialog() == true) 
    { 
     if (dialog.PrintQueue != null) 
      return dialog.PrintQueue; 
    } 
    return null; 
} 

Очередь печати может быть использована при печати нескольких документов;

... 
var startInfo = new ProcessStartInfo 
         { 
          CreateNoWindow = true, 
          Verb = "printTo", 
          FileName = filePath, 
          Arguments = printQueue.FullName, // <-- here 
          WindowStyle = ProcessWindowStyle.Hidden, 
          UseShellExecute = true, 
         }; 
var p = Process.Start(startInfo); 
... 
Смежные вопросы