Печать нестандартного размера бумаги на ударном принтере в WPF

Я печатаю на ударном принтере, загруженном бумагой 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.


person epalm    schedule 15.03.2013    source источник


Ответы (1)


Пожалуйста, найдите код ниже, он устанавливает размер бумаги в соответствии с требованиями

        var printerSettings = new PrinterSettings();
        var labelPaperSize = new PaperSize { RawKind = (int)PaperKind.A6, Height = 148, Width = 105 };
        printerSettings.DefaultPageSettings.PaperSize = labelPaperSize;
        var labelPaperSource = new PaperSource { RawKind = (int)PaperSourceKind.Manual };
        printerSettings.DefaultPageSettings.PaperSource = labelPaperSource;
        if (printerSettings.CanDuplex)
        {
            printerSettings.Duplex = Duplex.Default;
        }
person Palak.Maheria    schedule 21.01.2014