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;
}
}
14 Comments
bro kia yahi code hum crystal report me used kr sakty hen
ReplyDeleteyes, you can use.
DeleteThanks 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
DeleteAfter print a page it will automatically cut .
hello
ReplyDeleteI'm having an error. "An error occured during local report processing."
ReplyDeletesir can you please provide a vb code
ReplyDeletecan we dynamically change width and font of rdlc report for different printer
ReplyDeleteafter deploying giving file path error
ReplyDeleteHello sir. I'm have error not support DrawString please help me.
ReplyDeletehow to change pdf height dynamically I used
ReplyDeletedoc.DefaultPageSettings.PaperSize = new PaperSize("210 x 297 mm", 800, 800);
However the default pagesize did not changed
please Help
vb.net code
ReplyDeleteHow to print multi printer
ReplyDeletehello brother how to load rdlc report in unicode data in tables
ReplyDelete