我试图从C#WPF应用程序打印到不同寻常的打印机(BIXOLON SPP-R200III)。这台打印机的纸卷宽度58毫米,如用尺子测量和显示在Windows打印对话框:页面宽度与Windows打印对话框中的纸张大小不匹配
然而,当我尝试连接到这台打印机,并询问其能力通过.NET Framework中的System.Printing
API,我获得了不同的纸张宽度。
下面的代码枚举打印队列,并找到正确的一个:
const string printQueueName = @"BIXOLON SPP-R200III";
PrintServer printServer = new PrintServer();
PrintQueue printQueue = null;
PrintQueueCollection printQueues = printServer.GetPrintQueues();
foreach (PrintQueue queue in printQueues)
{
if (String.Equals(queue.FullName, printQueueName, StringComparison.CurrentCultureIgnoreCase))
{
printQueue = queue;
break;
}
}
此代码询问其功能:
PrintTicket defaultTicket = printQueue.DefaultPrintTicket;
PrintCapabilities printCapabilities = printQueue.GetPrintCapabilities(defaultTicket);
double pageWidth = (printCapabilities.OrientedPageMediaWidth.Value/96.0) * 25.4;
但结果,pageWidth
是48.047和不58毫米如预期的那样(PrintCapabilities.OrientedPageMediaWidth
是181.59496062992128。)
我也尝试查看默认的打印票结构本身,但printQueue.DefaultPrintTicket.PageMediaSize.Width
具有相同的值181.59496062992128。
最后,我想用下面的代码使用System.Windows.Controls.PrintDialog
:
PrintDialog printDialog = new PrintDialog();
printDialog.PrintQueue = printQueue;
printDialog.ShowDialog();
double pageWidth = (printDialog.PrintTicket.PageMediaSize.Width.Value/96.0) * 25.4;
而且我得到了相同的结果。
这是为什么?为什么这些宽度不匹配?我是否将点不正确地转换为毫米?我完全误解打印机功能吗?
找到打印机支持的纸张尺寸的正确方法是什么?如问题顶部的屏幕截图所示?
我没有想到这一点,但是'PrintCapabilities.PageBorderlessCapability'是一个空的收集和'printQueue.DefaultPrintTicket.PageBorderless'是'null',因为是'printDialog.PrintTicket.PageBorderless'。这意味着打印机不能支持无边界打印,但它不会显示边界实际是什么。我的问题依然存在。 – Xharlie
有点小鸟告诉我它是5毫米。 –
检查PageImageableArea的OriginWidth和OriginHeight。 – Clemens