C#强制打印作业为Simplex(打印机默认为Duplex)

时间:2012-04-12 08:46:41

标签: c# printing duplex simplex

问题
1.我们的客户有一台联网打印机,配置为双面打印(不能更改) 2.我们必须在此打印机上打印A4标签,但不能处于双面模式,因为标签绕过滚筒并弄脏。
3.当我们打印标签时,打印作业仍处于双工模式(通过打印到文件检查PCL输出进行验证)。

该行

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

没有效果。

我们如何强制在Simplex中打印页面?

我们的守则
我们使用.Net PrintDocument / PrintController类打印到A4打印机,如下所示。此代码来自一个测试应用程序,它可以通过一个简单的示例重现该问题。

我们有一个自定义PrintDocument类: a)在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();
    }
}

谢谢,亚当

1 个答案:

答案 0 :(得分:2)

在OnQueryPageSettings上设置PrinterSettings.Duplex属性无效,您需要在调用Print()之前设置此属性。 (现在我觉得很明显!)

这有效:

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();
    }
}