Friday, May 25, 2012

Choosing a printer when printing from Crystal Reports in C# Winform

Introduction

I use Crystal Reports 9 in my project. I once encountered an issue with printing a report. Then, I searched the Internet and found a code from this website that showed me how to send a report to the printer without previewing it, but the code did not allow me to choose the printer. In this article, I have customized the code to use a Print Dialog to choose the printer.

Using the code

I use the Print Dialog to get the printer name. Then, I assign it to the report. To print the report, I use the method:
crReportDocument.PrintToPrinter(nCopy, false, sPage, ePage);
to send the data from the report to the printer.
The code below shows how to choose the printer to print the report:
private void button2_Click(object sender, System.EventArgs e)
{
    //Open the PrintDialog
    this.printDialog1.Document = this.printDocument1;
    DialogResult dr = this.printDialog1.ShowDialog();
    if(dr == DialogResult.OK)
    {
        //Get the Copy times
        int nCopy = this.printDocument1.PrinterSettings.Copies;
        //Get the number of Start Page
        int sPage = this.printDocument1.PrinterSettings.FromPage;
        //Get the number of End Page
        int ePage = this.printDocument1.PrinterSettings.ToPage;
        //Get the printer name
        string PrinterName = this.printDocument1.PrinterSettings.PrinterName;

        crReportDocument = new ReportDocument();
        //Create an instance of a report
        crReportDocument = new Chart();
        try
        {
            //Set the printer name to print the report to. By default the sample
            //report does not have a defult printer specified. This will tell the
            //engine to use the specified printer to print the report. Print out 
            //a test page (from Printer properties) to get the correct value.

            crReportDocument.PrintOptions.PrinterName = PrinterName;


            //Start the printing process. Provide details of the print job
            //using the arguments.
            crReportDocument.PrintToPrinter(nCopy, false, sPage, ePage);

            //Let the user know that the print job is completed
            MessageBox.Show("Report finished printing!");
        }
        catch(Exception err)
        {
            MessageBox.Show(err.ToString());
        }
    }
}

Points of Interest

I think the important thing in this article is it shows how to get the names of printers in your computer or your local network.

No comments:

Post a Comment