Продолжайте печать на той же странице, используя PrintDocument или рекомендуемую библиотеку - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь продолжить печать каждого документа на той же странице.

Позвольте мне объяснить ... У меня есть текстовый файл, который обновляется каждые 5 минут, и этот файл содержит одну строку со значениями, разделенными запятыми.

Я читаю и анализирую этот файл каждые 5 минут, а затем использую PrintDocument для печати строки в файле. Проблема в том, что каждый раз, когда я звоню

pd.Print();

Он печатает мою строку на новой странице ..

Я ищу способ продолжить печать на следующей строке бумаги, чтобы избежать макулатуры. Или, другими словами, способ напечатать одну строку на принтере, не наматывая бумагу на новую страницу.

Я смотрел на реализацию Microsoft PrintDocument в

https://docs.microsoft.com/en-us/dotnet/api/system.drawing.printing.printdocument.printpage?view=netframework-4.7.2

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

Это моя функция для печати страницы, модифицированная для использования StringReader

private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
    float linesPerPage = 0;
    float yPos = 0;
    int   count = 0;
    float leftMargin = ev.MarginBounds.Left;
    float topMargin = ev.MarginBounds.Top;
    string line = null;

    // Calculate the number of lines per page.
    linesPerPage = ev.MarginBounds.Height /
        printFont.GetHeight(ev.Graphics);

    StringReader reader = new StringReader(reportHeader.ToString());

    // Print each line of the file.
    while (count < linesPerPage &&
        ((line =  reader.ReadLine()) != null))
    {
        yPos = topMargin + (count *
        printFont.GetHeight(ev.Graphics));
        ev.Graphics.DrawString(line, printFont, Brushes.Black,
            leftMargin, yPos, new StringFormat());
        count++;  
    }

    //ev.Cancel = true;
    //ev.HasMorePages = false;

    // If more lines exist, print another page.
    if (line != null)
        ev.HasMorePages = true;
    else
        ev.HasMorePages = false;
}

Предположим, что _ пустая строка

Фактические результаты после вызова pd.print ():

1 2 3 4 5 6







затем, когда я снова вызываю pd.print (), я получаю результаты новой страницы:

7 8 9 3 2 1







Ожидаемые результаты: 1 2 3 4 5 6 7 8 9 3 2 1 (затем я хочу, чтобы курсор принтера остановился здесь в ожидании следующего выполнения команды печати для печати следующих значений).

...