我正在尝试从C#WPF应用程序打印到一台不寻常的打印机( BIXOLON SPP-R200III )。使用标尺测量打印机纸卷的宽度 58mm ,如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 且不 58mm正如预期的那样!(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;
我得到了同样的结果。
这是为什么?为什么这些宽度不匹配?我是否错误地从点转换为毫米?我完全误解了打印机功能吗?
找到打印机支持的纸张尺寸的正确方法是什么,如此问题顶部的屏幕截图所示?
答案 0 :(得分:1)
因为有所谓的“可成像区域”,它总是小于纸张的物理尺寸。
可能是您的打印机无法在纸张的最边缘打印。
您可以通过检查PrintCapabilities.PageBorderlessCapability Property
。
大多数激光和喷墨打印机不支持无边距打印。它们必须允许未打印的边距,以防止碳粉进入移动纸张的打印机部件。然而,许多照相打印机确实支持无边界打印。 如果打印机不支持无边框打印,则该集合为空。