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

C# 在WPF中将自定义纸张尺寸打印到冲击式打印机,c#,wpf,printing,dot-matrix,C#,Wpf,Printing,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; Co

我正在用一台冲击式打印机打印,里面装着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);
使用“”我已经确定8.5英寸是816像素,这是我的
元素的大小。宽度
元素的大小。高度
。我正在设置一个新的
PageMediaSize
,但这似乎没有效果,
对话框。当我在对话框上设置队列时,可打印区域高度仍然是1056

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


此页建议我只能设置打印机支持的
PageMediaSize
。使用我的
PrintQueue
上的
getprintpabilities
函数,我看到一个大约10个页面大小的列表,其中没有一个是8.5 x 8.5。这与我在windows中打开打印机的高级设置时看到的列表相同。

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

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