Click here to Skip to main content
15,897,891 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am using following code in my program to generate a bill to customer.
This code is working fine. But the problem is

"Printer not get stop until finishing that page". I want to stop the printer once it completes printing the data.
Please help me regarding this.


C#
#region  OnPrintPage 
/// <summary>
/// Override the default OnPrintPage method of the PrintDocument
/// </summary>
/// <param name="e"></param>
/// <remarks>This provides the print logic for our document</remarks>
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
{
    // Run base code
    base.OnPrintPage(e);

    //Declare local variables needed
    
    int printHeight;
    int printWidth;
    int leftMargin;
    int rightMargin;
    Int32 lines;
    Int32 chars;

    //Set print area size and margins
    {
        printHeight = base.DefaultPageSettings.PaperSize.Height - base.DefaultPageSettings.Margins.Top - base.DefaultPageSettings.Margins.Bottom;
        printWidth = base.DefaultPageSettings.PaperSize.Width - base.DefaultPageSettings.Margins.Left - base.DefaultPageSettings.Margins.Right;
        leftMargin = base.DefaultPageSettings.Margins.Left;
        //X
        rightMargin = base.DefaultPageSettings.Margins.Top;
        //Y
    }

    //Check if the user selected to print in Landscape mode
    //if they did then we need to swap height/width parameters
    if (base.DefaultPageSettings.Landscape)
    {
        int tmp;
        tmp = printHeight;
        printHeight = printWidth;
        printWidth = tmp;
    }

    //Now we need to determine the total number of lines
    //we're going to be printing
    Int32 numLines = (int)printHeight / PrinterFont.Height;

    //Create a rectangle printing are for our document
    RectangleF printArea = new RectangleF(leftMargin, rightMargin, printWidth, printHeight);

    //Use the StringFormat class for the text layout of our document
    StringFormat format = new StringFormat(StringFormatFlags.LineLimit);

    //Fit as many characters as we can into the print area      

    e.Graphics.MeasureString(_text.Substring(RemoveZeros(curChar)), PrinterFont, new SizeF(printWidth, printHeight), format, out chars, out lines);

    //Print the page
    e.Graphics.DrawString(_text.Substring(RemoveZeros(curChar)), PrinterFont, Brushes.Black, printArea, format);

    //Increase current char count
    curChar += chars;

    //Detemine if there is more text to print, if
    //there is the tell the printer there is more coming
    if (curChar < _text.Length)
    {
        e.HasMorePages = true;
    }
    else
    {
        e.HasMorePages = false;
        curChar = 0;
    }
}

#endregion
Posted
Updated 15-Jan-14 22:07pm
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900