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

本文关键字:打印 冲击 式打印 打印机 张尺寸 WPF 自定义 | 更新日期: 2023-09-27 18:04:20

我在一台冲击式打印机上打印,加载了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);

使用"如何在。net中转换小提示到像素?"我已经确定8.5英寸是816像素,这是我的element.Widthelement.Height的大小。我正在设置一个新的PageMediaSize,但这似乎没有效果,当我在对话框上设置队列时,dialog.PrintableAreaHeight仍然在1056结束。

如果我执行dialog.ShowDialog(),手动选择我的打印机,并在打印机的高级设置中手动查找和更改纸张大小,那么dialog.PrintableAreaHeight正确地反映了更改。

这个页面http://go4answers.webhost4life.com/Example/set-printdialogs-default-page-size-168976.aspx建议我只能设置我的打印机支持的PageMediaSize。在我的PrintQueue上使用GetPrintCapabilities函数,我看到一个大约10个页面大小的列表,没有一个是8.5 x 8.5。这是我在windows中打开打印机高级设置时看到的相同列表

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

请查看下面的代码,它会根据需要设置纸张大小

        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;
        }