Click here to Skip to main content
15,894,017 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
XML
using System;
using System.Drawing;
using System.Drawing.Printing;

public class PCPrint : System.Drawing.Printing.PrintDocument
{

    #region  Property Variables
        private Font _font;
        private string _text;
    #endregion



    #region  Class Properties
            public string TextToPrint
            {
                get { return _text; }
                set { _text = value; }
            }
            public Font PrinterFont
            {
                // Allows the user to override the default font
                get { return _font; }
                set { _font = value; }
            }
    #endregion


    #region Static Local Variables
        static int curChar;
    #endregion



    #region  Class Constructors
        public PCPrint()
            : base()
        {
            //Set the file stream
            //Instantiate out Text property to an empty string
            _text = string.Empty;
        }

        /// <summary>
        /// Constructor to initialize our printing object
        /// and the text it's supposed to be printing
        /// </summary>
        /// <param name=str>Text that will be printed</param>
        /// <remarks></remarks>
        public PCPrint(string str)
            : base()
        {
            //Set the file stream
            //Set our Text property value
            _text = str;
        }
    #endregion



    #region  onbeginPrint
    /// <summary>
    /// Override the default onbeginPrint method of the PrintDocument Object
    /// </summary>
    /// <param name=e></param>
    /// <remarks></remarks>
    protected override void onbeginPrint(System.Drawing.Printing.PrintEventArgs e)
    {
        // Run base code
        base.onbeginPrint(e);

        //Check to see if the user provided a font
        //if they didn't then we default to Times New Roman
        if (_font == null)
        {
            //Create the font we need
            _font = new Font("Times New Roman", 10);
        }
    }
    #endregion



    #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

    #region  RemoveZeros
    /// <summary>
    /// Function to replace any zeros in the size to a 1
    /// Zero's will mess up the printing area
    /// </summary>
    /// <param name=value>Value to check</param>
    /// <returns></returns>
    /// <remarks></remarks>
    public int RemoveZeros(int value)
    {
        //Check the value passed into the function,
        //if the value is a 0 (zero) then return a 1,
        //otherwise return the value passed in
        switch (value)
        {
            case 0:
                return 1;
            default:
                return value;
        }
    }
    #endregion




    #region  PrintDocument
    public void PrintDocument()
    {
        //Create an instance of our printer class
        PCPrint printer = new PCPrint();
        //Set the font we want to use
        printer.PrinterFont = new Font("Verdana", 10);
        //Set the TextToPrint property
        printer.TextToPrint = Textbox1.Text;
        //Issue print command
        printer.Print();
    }
    #endregion
}
Posted
Comments
Vedat Ozan Oner 13-May-14 7:49am    
what happens on that line?
agent_kruger 13-May-14 7:56am    
sir, please try to short your code and keep that code here which is really getting executed and giving error.
agent_kruger 13-May-14 7:56am    
sir, what is the error, please specify?

1 solution

Change onbeginPrint to OnBeginPrint

C#
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
{
    // Run base code
    base.OnBeginPrint(e);

    //Check to see if the user provided a font
    //if they didn't then we default to Times New Roman
    if (_font == null)
    {
        //Create the font we need
        _font = new Font("Times New Roman", 10);
    }
}
 
Share this answer
 
v3

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