Диапазон печати не работает, даже если заданы значения
У меня настроено простое решение для печати, и нормальная печать работает нормально (проверил его пару раз), однако, когда я использую PrintDialog для указания пользовательского диапазона страниц, он как будто введен. Когда я выполняю отладку, я проверяю объект printDocument и подтверждаю, что значения диапазона верны, но конечный продукт, который производит принтер, не так сильно соответствует значениям, которые я ему дал.
Вот мой код:
printDialog.Document = printdoc;
printDialog.AllowSomePages = true;
if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
printdoc.PrinterSettings.FromPage = printDialog.PrinterSettings.FromPage;
printdoc.PrinterSettings.ToPage = printDialog.PrinterSettings.ToPage;
printdoc.PrinterSettings.PrintRange = printDialog.PrinterSettings.PrintRange;
printPreviewDialog.Document = printdoc;
printPreviewDialog.FindForm().WindowState = FormWindowState.Maximized;
printPreviewDialog.ShowDialog();
}
* Примечание - printdoc является экземпляром System.Drawing.Printing.PrintDocument. Я добавил код в обработчик события PrintPage для PrintDocument, чтобы заполнить страницу, которую я печатаю.
1 ответ
Вы должны сообщить диалоговому окну печати, что оно должно принимать пользовательский ввод для диапазонов страниц. Для этого вы можете указать PrinterSettings.PrintRange
,
var printDialog = new PrintDialog();
printDialog.AllowSomePages = true; //May not be needed
printDialog.PrinterSettings.PrintRange = PrintRange.SomePages; //Needed
if(printDialog.ShowDialog() == DialogResult.OK)
{
// ... do the rest here
}
Примечания: Главное, что вы должны получить, это то, что вам нужно установить PrintDialog.AllowSomePages = true
(вместе с From/ToPage), чтобы указать диалогу печатать только эти диапазоны. Кроме того, я не уверен, если настройка AllowSomePages
после закрытия диалога вступит в силу, поэтому я поставил код перед ShowDialog
, Вы можете попытаться установить его внутри оператора if по вашему усмотрению.