Я печатаю на ударном принтере, загруженном бумагой 8,5 x 8,5 дюймов. Когда я печатаю, принтер выдает 11 дюймов вместо 8,5.
PageMediaSize pageSize = new PageMediaSize(PageMediaSizeName.Unknown, element.Width, element.Height);
PrintDialog dialog = new PrintDialog();
dialog.PrintTicket.PageMediaSize = pageSize;
Console.WriteLine(dialog.PrintableAreaHeight); // 816, good!
dialog.PrintQueue = myQueue; // selected from a combobox
Console.WriteLine(dialog.PrintableAreaHeight); // 1056 :(
dialog.PrintVisual(element, description);
Используя "Как преобразовать Twips в Pixels в .NET?» Я определил, что 8,5 дюйма — это 816 пикселей, что соответствует размеру моих element.Width
и element.Height
. Я устанавливаю новый PageMediaSize
, но это, кажется, не имеет никакого эффекта, dialog.PrintableAreaHeight
по-прежнему заканчивается на 1056, когда я устанавливаю очередь в диалоговом окне.
Если я сделаю dialog.ShowDialog()
, вручную выберу свой принтер и вручную найду и изменю размер бумаги в дополнительных настройках моего принтера, то dialog.PrintableAreaHeight
правильно отразит изменение.
Эта страница http://go4answers.webhost4life.com/Example/set-printdialogs-default-page-size-168976.aspx предполагает, что я могу установить только PageMediaSize
, поддерживаемый моим принтером. Используя функцию GetPrintCapabilities
на моем PrintQueue
, я вижу список примерно из 10 размеров страниц, ни один из которых не соответствует размеру 8,5 x 8,5. Это тот же список, который я вижу, когда захожу в дополнительные настройки своего принтера в Windows.