2012-04-12 4 views
3

Проблема
1. Наш клиент имеет сетевой принтер, который настроен на печать в Duplex (это не может быть изменено).
2. Мы должны печатать листы А4 с этикетками на этом принтере, но он не должен быть в дуплексном режиме, когда этикетки обходят ролики и загрязняются.
3. Когда мы печатаем наши ярлыки, задание на печать по-прежнему находится в дуплексном режиме (проверяется путем проверки вывода PCL путем печати в файл).C# работа сила печати быть Simplex (принтер по умолчанию Duplex)

Линия

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

не имеет никакого эффекта.

Как заставить страницу печатать в Simplex?

Наш Кодекс
Мы печать на принтер формата А4 с использованием классов .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(); 
    } 
} 

Спасибо, Адам

ответ

2

Установка свойства PrinterSettings.Duplex на OnQueryPageSettings не имеет никакого эффекта, вы должны установить это свойство перед вызовом 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(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^