我試圖從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