-
-
Save shakee93/f5eb53a1dfec486e1376d63c3063e51b to your computer and use it in GitHub Desktop.
| using System; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using System.Text; | |
| using Microsoft.Reporting.WinForms; | |
| using System.Reflection; | |
| using System.Drawing.Printing; | |
| using System.IO; | |
| using System.Drawing.Imaging; | |
| using System.Drawing; | |
| namespace YourApp | |
| { | |
| public static class PrintReport{ | |
| private static int m_currentPageIndex; | |
| private static IList<Stream> m_streams; | |
| 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 Export(LocalReport report, bool print = true) | |
| { | |
| string deviceInfo = | |
| @"<DeviceInfo> | |
| <OutputFormat>EMF</OutputFormat> | |
| <PageWidth>6.2in</PageWidth> | |
| <PageHeight>8.3in</PageHeight> | |
| <MarginTop>0.1in</MarginTop> | |
| <MarginLeft>0.1in</MarginLeft> | |
| <MarginRight>0.1in</MarginRight> | |
| <MarginBottom>0.1in</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(); | |
| } | |
| } | |
| // Handler for PrintPageEvents | |
| 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 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 void PrintToPrinter(this LocalReport report) | |
| { | |
| Export(report); | |
| } | |
| public static void DisposePrint() | |
| { | |
| if (m_streams != null) | |
| { | |
| foreach (Stream stream in m_streams) | |
| stream.Close(); | |
| m_streams = null; | |
| } | |
| } | |
| } | |
| } |
Hi, first of all I'd like to thank you for sharing your code.
I've added the class and changed the namespace as needed and everything is ok, but when I run the code I get an exception of null referencing.
Below is how I used the code after I added the class:
LocalReport report = new LocalReport();
report.ReportEmbeddedResource = @"Report8.rdlc";
report.DataSources.Add(new ReportDataSource("DataSet1", glBindingSource));
report.PrintToPrinter();
the exception happens here:
report.Render("Image", deviceInfo, CreateStream,
out warnings);
part of the exception text is below:
at Microsoft.Reporting.WinForms.LocalReport.EnsureExecutionSession()System.NullReferenceException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Object reference not set to an instance of an object. at Microsoft.ReportingServices.StandalonePreviewStore.GetReportDefinition(PreviewItemContext itemContext)System.NullReferenceException: Object reference not set to an instance of an object.
Where am I making the mistake?
Thanks for sharing..!!
I have one issue, It asks me to save files into pdf before printing. how can I avoid this I mean it should directly print the file rather than asking to save it.
Please help me with this issue.
Thanks for sharing..!!
I have one issue, It asks me to save files into pdf before printing. how can I avoid this I mean it should directly print the file rather than asking to save it.
Please help me with this issue.
@fakfarrukh I think you can find the solution here: https://stackoverflow.com/questions/34727037/print-rdlc-report-without-showing-reportviewer-control
Thanks for posting the code!
What is the license for using this code? Can I used in a for profit application?
That's just perfect. Worked like a charm. Thanks a ton.