Можно ли запланировать печать принтера постранично? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть печатный документ формата A3, который содержит изображения, предоставленные заказчиком, и он будет заполнять документ путем вычислений (иногда для printDocument может быть рассчитано более 300 изображений одновременно). Проблема, с которой я сталкиваюсь сейчас, заключается в том, что при отправке на принтер документ слишком велик для обработки памяти принтера. Можно ли разрешить принтеру печатать страницу сразу после ее отправки, а не весь документ? Мой коллега предлагает разбить эти страницы на другой документ. Возможно ли это?

Я изучил документацию, и у printDocument или printerController, похоже, нет возможности поговорить с принтером, чтобы начать печать страницы, как только она получит.

В моем тестовом прогоне у меня есть задание, состоящее из 360 изображений, помещенных на 28 страниц, и размер буфера документа увеличился до 2,71 ГБ Снимок экрана очереди печати

private void PrintPageEventHandler(object sender, PrintPageEventArgs e)
{
    //set some settings
    //loop until the page has been filled up by images
    while(counter < maxImageAllowedPerPage)
    {
        e.Graphics.DrawImage(image, currentPoint.X + posX, currentPoint.Y + 
             posY, newWidth, newHeight);
    }

    e.Graphics.Dispose();
    e.HasMorePages = (PrintedImageCount != TotalImageCount);
}

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

У меня получилось что-то похожее на ответ @ cjb110

//initialize the print docuemnts with all settings required
var printDocument = new PrintDocument();
printDocument.PrintedImageCount = 0;
printDocument.TotalImageCount = 150;

while(printDocument.PrintedImageCount != printDocument.TotalImageCount){
    printDocument.Print();
}

На данный момент принтер может обрабатывать, основываясь на том, что мой тестовый документ 30 отправляется на принтер без сбоев, и мой клиент будетсамостоятельно следить за тем, сколько документов может принять принтер, пока не произойдет сбой, чтобы узнать, нужно ли мне вводить ограничение для предотвращения одновременной отправки слишком большого количества документов.

Спасибо всем, кто предлагает разные виды документов. решения.

0 голосов
/ 02 ноября 2019

Хорошо, основываясь на Microsoft docs для PrintDocument, вам просто нужно переместить цикл.

Так что-то вроде

while(counter < maxImageAllowedPerPage)
{
    PrintDocument pd = new PrintDocument();
    pd.PrintPage += new PrintPageEventHandler(this.PrintPageEventHandler);
    pd.Print();
}

Не уверен, как вы определяетекакие image нужно напечатать, но вам нужно будет сделать это и в этом цикле, вероятно, до финального Print(), поскольку именно это вызовет обработчик событий. Возможно, вам понадобятся две коллекции «изображений», ваша полная коллекция изображений и коллекция, которая заполняется для каждой страницы, поэтому вы заполните эту вторую коллекцию в цикле выше, и EV PrintPage будет читать из этой коллекции.

Oh и HasMorePages теперь всегда будут ложными.

...