[Win] Настройки принтера (PrinterSettings)
От: karbofos42 Россия  
Дата: 19.10.22 11:35
Оценка:
Есть задача:
Пользователь в ComboBox выбирает нужный принтер, потом на этот принтер отправляется документ на печать.

Сейчас условно такой код:
PrintDocument doc = new PrintDocument();
doc.PrinterSettings.PrinterName = printerName;
doc.PrintPage += printPage;

doc.Print();

На всех, доступных для тестирования принтерах, это работает нормально.
Но вот у пользователей нашлась пара принтеров. Один ничего не печатает, а другой печатает Postscript код
(я так понимаю, что принтер не умеет PS, ждёт PCL, но ему почему-то приходит PS, который он и выводит как плоский текст).

Если настройки принтера получить через PrintDialog, то всё печатает нормально и на проблемных принтерах:
System.Windows.Forms.PrintDialog dlg = new System.Windows.Forms.PrintDialog();
            
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
  PrintDocument doc = new PrintDocument();
  doc.PrinterSettings = dlg.PrinterSettings;
  doc.PrintPage += printPage;

  doc.Print();
}

Как-то можно по имени принтера получить настройки, как из этого диалога?
Или может кто-то сталкивался с такой проблемой и знает решение?
Re: [Win] Настройки принтера (PrinterSettings)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 19.10.22 11:57
Оценка:
Здравствуйте, karbofos42, Вы писали:

Один из вариантов сериализовать, десериализовать PrinterSettings (в интернете полно примеров)
Но не всегда помогает!
Поэтому самому интересно.
и солнце б утром не вставало, когда бы не было меня
Re: [Win] Настройки принтера (PrinterSettings)
От: Janus Россия  
Дата: 19.10.22 18:56
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Есть задача:

K>Пользователь в ComboBox выбирает нужный принтер, потом на этот принтер отправляется документ на печать.

А если попробовать так

PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "Printer name";
...
... Хорошо уметь читать между строк. Это иногда
приносит большую пользу
Re[2]: [Win] Настройки принтера (PrinterSettings)
От: karbofos42 Россия  
Дата: 20.10.22 06:08
Оценка:
Здравствуйте, Janus, Вы писали:

J>А если попробовать так


Внутри PrintDocument через этот же пустой конструктор создаются PrinterSettings, т.е. по сути сейчас то же самое делается и иногда не работает.
Re[3]: [Win] Настройки принтера (PrinterSettings)
От: Janus Россия  
Дата: 20.10.22 07:07
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Здравствуйте, Janus, Вы писали:


J>>А если попробовать так


K>Внутри PrintDocument через этот же пустой конструктор создаются PrinterSettings, т.е. по сути сейчас то же самое делается и иногда не работает.


А что неработающий принтер выдает на
   PrinterSettings.IsValid

?
... Хорошо уметь читать между строк. Это иногда
приносит большую пользу
Re[4]: [Win] Настройки принтера (PrinterSettings)
От: karbofos42 Россия  
Дата: 20.10.22 08:43
Оценка:
Здравствуйте, Janus, Вы писали:

J>А что неработающий принтер выдает на

J>
J>   PrinterSettings.IsValid
J>

J>?

Не знаю. Оказалось, что этой проверки не было. Вот так взять и новый код проверить не могу.
В принципе, это ничего не изменит. Разве что, программа начнёт выдавать сообщение об ошибке и перестанет хлам печатать
(и то не факт, что свойство говорит о чём-то, кроме наличия в системе принтера с указанным именем).
Пользователь всё равно будет недоволен, что у него не печатается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.