问题
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();
}
}
谢谢,亚当
答案 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();
}
}