在WPF中将自定义纸张尺寸打印到冲击打印机

epa*_*alm 5 c# printing wpf dot-matrix

我打印到装有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);
Run Code Online (Sandbox Code Playgroud)

使用" 如何在.NET中将Twips转换为像素? "我已经确定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中进入打印机高级设置时看到的列表相同.

Pal*_*ria 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;
        }
Run Code Online (Sandbox Code Playgroud)