页面宽度与Windows打印对话框中的纸张大小不匹配

时间:2017-08-25 09:32:59

标签: c# .net wpf windows printing

我正在尝试从C#WPF应用程序打印到一台不寻常的打印机( BIXOLON SPP-R200III )。使用标尺测量打印机纸卷的宽度 58mm ,如Windows打印对话框中所示:

Printer Settings for the BIXOLON SPP-R200III

但是,当我尝试连接到此打印机并通过.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;

我得到了同样的结果。

这是为什么?为什么这些宽度不匹配?我是否错误地从点转换为毫米?我完全误解了打印机功能吗?

找到打印机支持的纸张尺寸的正确方法是什么,如此问题顶部的屏幕截图所示?

1 个答案:

答案 0 :(得分:1)

因为有所谓的“可成像区域”,它总是小于纸张的物理尺寸。 可能是您的打印机无法在纸张的最边缘打印。 您可以通过检查PrintCapabilities.PageBorderlessCapability Property

来确保

请参阅此链接:https://msdn.microsoft.com/en-us/library/system.printing.printcapabilities.pageborderlesscapability(v=vs.110).aspx

  

大多数激光和喷墨打印机不支持无边距打印。它们必须允许未打印的边距,以防止碳粉进入移动纸张的打印机部件。然而,许多照相打印机确实支持无边界打印。   如果打印机不支持无边框打印,则该集合为空。