Проблема
1. У нашего клиента есть сетевой принтер, настроенный для двусторонней печати (это нельзя изменить).
2. Мы должны печатать листы этикеток формата A4 на этом принтере, но он не должен быть в дуплексном режиме, так как этикетки перемещаются вокруг роликов и запутываются.
3. Когда мы печатаем наши этикетки, задание на печать все еще находится в дуплексном режиме (проверено путем изучения вывода PCL путем печати в файл).
Линия
e.PageSettings.PrinterSettings.Duplex = Duplex.Simplex;
не имеет никакого эффекта.
Как заставить страницу печататься в симплексе?
Наш код
Мы печатаем на принтере формата A4, используя классы .Net PrintDocument/PrintController, как показано ниже. Этот код взят из тестового приложения, которое может воспроизвести проблему на простом примере.
У нас есть собственный класс PrintDocument, который:
а) устанавливает параметры печати в OnQueryPageSettings;
protected override void OnQueryPageSettings(QueryPageSettingsEventArgs e)
{
// This setting has no effect
e.PageSettings.PrinterSettings.Duplex = Duplex.Simplex;
}
б) Генерирует содержимое страницы в методе 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();
}
}
Спасибо, Адам