Есть задача:
Пользователь в 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();
}
Как-то можно по имени принтера получить настройки, как из этого диалога?
Или может кто-то сталкивался с такой проблемой и знает решение?
Здравствуйте, karbofos42, Вы писали:
K>Есть задача:
K>Пользователь в ComboBox выбирает нужный принтер, потом на этот принтер отправляется документ на печать.
А если попробовать так
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "Printer name";
...
... Хорошо уметь читать между строк. Это иногда
приносит большую пользу
Здравствуйте, karbofos42, Вы писали:
K>Здравствуйте, Janus, Вы писали:
J>>А если попробовать так
K>Внутри PrintDocument через этот же пустой конструктор создаются PrinterSettings, т.е. по сути сейчас то же самое делается и иногда не работает.
А что неработающий принтер выдает на
PrinterSettings.IsValid
?
... Хорошо уметь читать между строк. Это иногда
приносит большую пользу
Здравствуйте, Janus, Вы писали:
J>А что неработающий принтер выдает на
J>J> PrinterSettings.IsValid
J>
J>?
Не знаю. Оказалось, что этой проверки не было. Вот так взять и новый код проверить не могу.
В принципе, это ничего не изменит. Разве что, программа начнёт выдавать сообщение об ошибке и перестанет хлам печатать
(и то не факт, что свойство говорит о чём-то, кроме наличия в системе принтера с указанным именем).
Пользователь всё равно будет недоволен, что у него не печатается.