using BiskLog_Point_Of_Sale.Multiple_Login; using Microsoft.Reporting.WinForms; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Printing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace BiskLog_Point_Of_Sale.Classes { public static class TagConfig { private static List m_streams; private static int m_currentPageIndex = 0; static string printLocation = ""; static string ReportPrinterName = ""; public static void PrintToPrinter(LocalReport report, string printLoc, string PrinterName) { printLocation = printLoc; ReportPrinterName = PrinterName; Export(report); } public static void Export(LocalReport report, bool print = true) { string deviceInfo = @" EMF 1.9685in 0.984252in 0.0n 0.0in 0.0in 0.0in "; Warning[] warnings; m_streams = new List(); report.Render("Image", deviceInfo, CreateStream, out warnings); foreach (Stream stream in m_streams) stream.Position = 0; if (print) { Print(); } } public static void Print() { try { // if (m_streams == null || m_streams.Count == 0) // throw new Exception("Error: no stream to print."); PrintDocument printDoc = new PrintDocument(); if (!String.IsNullOrEmpty(printLocation)) { PrinterSettings printersettings = new PrinterSettings() { PrinterName = ReportPrinterName, PrintToFile = true, PrintFileName = printLocation + @"\" + DateTime.Now.ToString("yyyy-MM-ddHHmmssddfff") + ".pdf", }; printDoc.PrinterSettings = printersettings; } else { PrinterSettings printersettings = new PrinterSettings() { PrinterName = ReportPrinterName, PrintToFile = false, }; printDoc.PrinterSettings = printersettings; } printDoc.PrintPage += new PrintPageEventHandler(PrintPage); m_currentPageIndex = 0; printDoc.Print(); //} } catch (Exception ex) { ErrorLogging.WriteToFile(ex.ToString()); string message = "Error sending document to printer, check printer connection and " + "try again!!!"; string title = "Error sending to printer"; NoAction noAction = new NoAction(title, message); noAction.BringToFront(); noAction.ShowDialog(); } } 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; } } } }