2012-04-12 115 views
3

的問題
1.我們的客戶有被配置在雙面打印網絡打印機(這不能更改)。
2.我們必須在此打印機上打印A4張標籤,但不得在雙面打印模式下打印,因爲標籤繞過滾筒而變髒。
3.當我們打印標籤時,打印作業仍處於雙面模式(通過打印到文件檢查PCL輸出來驗證)。C#力的打印作業是單面(打印機默認的雙面)

e.PageSettings.PrinterSettings.Duplex = Duplex.Simplex; 

沒有效果。

我們如何強制頁面在Simplex中打印?

我們的代碼
我們打印到使用.net的PrintDocument/PrintController類的A4打印機,如下圖所示。這段代碼來自一個測試應用程序,它可以通過一個簡單的例子來重現問題。

我們有一個自定義的PrintDocument類:
一)設置OnQueryPageSettings打印設置

protected override void OnQueryPageSettings(QueryPageSettingsEventArgs e) 
{ 
    // This setting has no effect 
    e.PageSettings.PrinterSettings.Duplex = Duplex.Simplex; 
} 

B)生成的OnPrintPage方法的頁面內容:

protected override void OnPrintPage(PrintPageEventArgs e) 
{ 
    Graphics g = e.Graphics; 

    int fs = 12; 
    FontStyle style = FontStyle.Regular; 
    Font baseFont = new Font("Arial", fs, style); 

    PointF pos = new PointF(10, 10); 

    g.DrawString("This is a test page", baseFont, Brushes.Black, pos); 

    e.HasMorePages = false; 
} 

踢這個關閉我們創建PrintDocument的一個實例,爲其分配StandardPrintController並調用Print():

void DoPrint() 
{ 
    MyPrintDocument mydoc = new MyPrintDocument(); 

    PrinterSettings ps = ShowPrintDialog(); 
    if (ps != null) 
    { 
     mydoc.PrinterSettings = ps; 
     StandardPrintController cont = new StandardPrintController(); 
     mydoc.PrintController = cont; 
     mydoc.Print(); 
    } 
} 

謝謝,亞當

回答

2

設置上OnQueryPageSettings的PrinterSettings.Duplex屬性沒有任何效果,你需要在調用打印之前設置該屬性()。 (它似乎很明顯,現在我想想吧!)

這工作:

void DoPrint() 
{ 
    MyPrintDocument mydoc = new MyPrintDocument(); 

    PrinterSettings ps = ShowPrintDialog(); 
    if (ps != null) 
    { 
     ps.Duplex = Duplex.Simplex; // This works 

     mydoc.PrinterSettings = ps; 
     StandardPrintController cont = new StandardPrintController(); 
     mydoc.PrintController = cont; 
     mydoc.Print(); 
    } 
} 
相關問題