/// <summary> /// Print Report to specificed printer. /// </summary> /// <param name="rptViewer">The instance of Report Viewer Control.</param> /// <param name="printerName">The target printer name.</param> /// <param name="fromPage">-1 for print all</param> /// <param name="toPage">-1 for print all</param> /// <param name="noOfCopies">The Number of Copies.</param> /// <returns>Returns instance of RdlcPrintResult.</returns> public static RdlcPrintResult PrintTo(this ReportViewer rptViewer, string printerName, int fromPage = -1, int toPage = -1, short noOfCopies = 1) { RdlcPrintResult result = new RdlcPrintResult(); result.Success = false; if (string.IsNullOrWhiteSpace(printerName)) { result.Message = "No printer selected."; RdlcMessageService.Instance.SendMessage(result.Message); return(result); } if (null == rptViewer.LocalReport || null == rptViewer.LocalReport.DataSources || rptViewer.LocalReport.DataSources.Count <= 0) { result.Message = "Report is not loaded or report has no data."; RdlcMessageService.Instance.SendMessage(result.Message); return(result); } LocalReportRenderer prt = null; try { LocalReport lr = rptViewer.LocalReport; ReportPageSettings settings = lr.GetDefaultPageSettings(); if (null == settings) { result.Message = "Cannot get page settings."; RdlcMessageService.Instance.SendMessage(result.Message); return(result); } #region Assign page setting LocalReportPageSettings pageSettings = new LocalReportPageSettings(); if (!settings.IsLandscape) { pageSettings.PageHeight = Convert.ToDouble( (double)settings.PaperSize.Height / (double)100); pageSettings.PageWidth = Convert.ToDouble( (double)settings.PaperSize.Width / (double)100); } else { pageSettings.PageHeight = Convert.ToDouble( (double)settings.PaperSize.Width / (double)100); pageSettings.PageWidth = Convert.ToDouble( (double)settings.PaperSize.Height / (double)100); } pageSettings.MarginLeft = Convert.ToDouble( (double)settings.Margins.Left / (double)100); pageSettings.MarginRight = Convert.ToDouble( (double)settings.Margins.Right / (double)100); pageSettings.MarginTop = Convert.ToDouble( (double)settings.Margins.Top / (double)100); pageSettings.MarginBottom = Convert.ToDouble( (double)settings.Margins.Bottom / (double)100); //pageSettings.MarginLeft = 0; //pageSettings.MarginRight = 0; //pageSettings.MarginTop = 0; //pageSettings.MarginBottom = 0; pageSettings.Landscape = settings.IsLandscape; pageSettings.FromPage = fromPage; pageSettings.ToPage = toPage; #if WYSIWYG // Read Screen Resolution int dx, dy; System.Drawing.Graphics g = rptViewer.CreateGraphics(); try { dx = Convert.ToInt32(g.DpiX); dy = Convert.ToInt32(g.DpiY); } finally { g.Dispose(); } pageSettings.DpiX = dx; pageSettings.DpiY = dy; // Create dialog and re read resolution. System.Windows.Forms.PrintDialog pd = new System.Windows.Forms.PrintDialog(); pd.PrinterSettings.PrinterName = printerName; System.Drawing.Printing.PrinterSettings ps = pd.PrinterSettings; pageSettings.PrintDpiX = ps.DefaultPageSettings.PrinterResolution.X; pageSettings.PrintDpiY = ps.DefaultPageSettings.PrinterResolution.Y; #endif #endregion prt = new LocalReportRenderer(); prt.Print(lr, printerName, pageSettings, noOfCopies); result.Success = true; result.Message = "Print Success."; RdlcMessageService.Instance.SendMessage(result.Message); } catch (Exception ex) { result.Message = ex.ToString(); } finally { if (null != prt) { prt.Dispose(); } prt = null; } return(result); }