3

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

谢谢,亚当

4

1 回答 1

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();
    }
}
于 2012-04-13T14:07:06.753 回答