Created
August 23, 2016 03:48
-
-
Save shakee93/f5eb53a1dfec486e1376d63c3063e51b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
} | |
} |
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?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.