How to print directly without showing report viewer in rdlc report ?


How to print directly without showing report viewer in rdlc report :

Youtube Video Link: https://www.youtube.com/watch?v=uTzwk6zBdQs  

C# Code: 

private static List<Stream> m_streams;
   private static int m_currentPageIndex = 0;
 //==========================

  LocalReport report = new LocalReport();
          string path = rptName;
          report.ReportPath = path;
          report.DataSources.Add(new ReportDataSource(dsName, ds.table[0]));
          report.SetParameters(parameters);
          PrintToPrinter(report);
//========================================================

  public static void PrintToPrinter(LocalReport report)
        {
            Export(report);

        }

  public static void Export(LocalReport report, bool print = true)
        {
            string deviceInfo =
             @"<DeviceInfo>
                <OutputFormat>EMF</OutputFormat>
                <PageWidth>3in</PageWidth>
                <PageHeight>8.3in</PageHeight>
                <MarginTop>0in</MarginTop>
                <MarginLeft>0.1in</MarginLeft>
                <MarginRight>0.1in</MarginRight>
                <MarginBottom>0in</MarginBottom>
            </DeviceInfo>";
            Warning[] warnings;
            m_streams = new List<Stream>();
            report.Render("Image", deviceInfo, CreateStream,out warnings);
            foreach (Stream stream in m_streams)
                stream.Position = 0;

            if (print)
            {
                Print();
            }
        }


public static void Print()
        {
            if (m_streams == null || m_streams.Count == 0)
                throw new Exception("Error: no stream to print.");
            PrintDocument printDoc = new PrintDocument();
            if (!printDoc.PrinterSettings.IsValid)
            {
                throw new Exception("Error: cannot find the default printer.");
            }
            else
            {
                printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
                m_currentPageIndex = 0;
                printDoc.Print();
            }
        }

 public static Stream CreateStream(string name,string fileNameExtension, Encoding encoding,string mimeType, bool willSeek)
        {
            Stream stream = new MemoryStream();
            m_streams.Add(stream);
            return stream;
        }

 public static void PrintPage(object sender, PrintPageEventArgs ev)
        {
            Metafile pageImage = new
               Metafile(m_streams[m_currentPageIndex]);

            // Adjust rectangular area with printer margins.
            Rectangle adjustedRect = new Rectangle(
                ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
                ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
                ev.PageBounds.Width,
                ev.PageBounds.Height);

            // Draw a white background for the report
            ev.Graphics.FillRectangle(Brushes.White, adjustedRect);

            // Draw the report content
            ev.Graphics.DrawImage(pageImage, adjustedRect);

            // Prepare for the next page. Make sure we haven't hit the end.
            m_currentPageIndex++;
            ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
        }

public static void DisposePrint()
        {
            if (m_streams != null)
            {
                foreach (Stream stream in m_streams)
                    stream.Close();
                m_streams = null;
            }
        }

Post a Comment

13 Comments

  1. bro kia yahi code hum crystal report me used kr sakty hen

    ReplyDelete
  2. Thanks for sharing your knowledge. I have a question though, how do you deal with the cutting of paper if this will be printed on a POS?

    ReplyDelete
  3. I'm having an error. "An error occured during local report processing."

    ReplyDelete
  4. sir can you please provide a vb code

    ReplyDelete
  5. can we dynamically change width and font of rdlc report for different printer

    ReplyDelete
  6. after deploying giving file path error

    ReplyDelete
  7. Hello sir. I'm have error not support DrawString please help me.

    ReplyDelete
  8. how to change pdf height dynamically I used
    doc.DefaultPageSettings.PaperSize = new PaperSize("210 x 297 mm", 800, 800);
    However the default pagesize did not changed
    please Help

    ReplyDelete
  9. How to print multi printer

    ReplyDelete