///<Summary></Summary> public static void Print(Sheet sheet,int copies,bool isRxControlled){ //parameter null check moved to SheetFiller. //could validate field names here later. SheetList=new List<Sheet>(); for(int i=0;i<copies;i++){ SheetList.Add(sheet.Copy()); } sheetsPrinted=0; PrintDocument pd=new PrintDocument(); pd.OriginAtMargins=true; pd.PrintPage+=new PrintPageEventHandler(pd_PrintPage); if(pd.DefaultPageSettings.PrintableArea.Width==0) { //prevents bug in some printers that do not specify paper size pd.DefaultPageSettings.PaperSize=new PaperSize("paper",850,1100); } if(sheet.SheetType==SheetTypeEnum.LabelPatient || sheet.SheetType==SheetTypeEnum.LabelCarrier || sheet.SheetType==SheetTypeEnum.LabelAppointment || sheet.SheetType==SheetTypeEnum.LabelReferral) {//I think this causes problems for non-label sheet types. if(sheet.Width>0 && sheet.Height>0) { pd.DefaultPageSettings.PaperSize=new PaperSize("Default",sheet.Width,sheet.Height); } } PrintSituation sit=PrintSituation.Default; pd.DefaultPageSettings.Landscape=sheet.IsLandscape; switch(sheet.SheetType){ case SheetTypeEnum.LabelPatient: case SheetTypeEnum.LabelCarrier: case SheetTypeEnum.LabelReferral: case SheetTypeEnum.LabelAppointment: sit=PrintSituation.LabelSingle; break; case SheetTypeEnum.ReferralSlip: sit=PrintSituation.Default; break; case SheetTypeEnum.Rx: if(isRxControlled){ sit=PrintSituation.RxControlled; } else{ sit=PrintSituation.Rx; } break; } //later: add a check here for print preview. #if DEBUG pd.DefaultPageSettings.Margins=new Margins(20,20,0,0); FormPrintPreview printPreview; printPreview=new FormPrintPreview(sit,pd,SheetList.Count,sheet.PatNum,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed"); printPreview.ShowDialog(); #else try { if(sheet.PatNum!=null){ if(!PrinterL.SetPrinter(pd,sit,sheet.PatNum,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed")) { return; } } else{ if(!PrinterL.SetPrinter(pd,sit,0,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed")) { return; } } pd.DefaultPageSettings.Margins=new Margins(0,0,0,0); pd.Print(); } catch(Exception ex){ throw ex; //MessageBox.Show(Lan.g("Sheet","Printer not available")); } #endif }
///<Summary></Summary> public static void Print(Sheet sheet,int copies=1,bool isRxControlled=false,Statement stmt=null,MedLab medLab=null){ //parameter null check moved to SheetFiller. //could validate field names here later. _stmt=stmt; _medLab=medLab; _isPrinting=true; _sheetsPrinted=0; _yPosPrint=0;// _printMargin.Top; PrintDocument pd=new PrintDocument(); pd.OriginAtMargins=true; pd.PrintPage+=new PrintPageEventHandler(pd_PrintPage); if(pd.DefaultPageSettings.PrintableArea.Width==0) { //prevents bug in some printers that do not specify paper size pd.DefaultPageSettings.PaperSize=new PaperSize("paper",850,1100); } if(sheet.SheetType==SheetTypeEnum.LabelPatient || sheet.SheetType==SheetTypeEnum.LabelCarrier || sheet.SheetType==SheetTypeEnum.LabelAppointment || sheet.SheetType==SheetTypeEnum.LabelReferral) {//I think this causes problems for non-label sheet types. if(sheet.Width>0 && sheet.Height>0) { pd.DefaultPageSettings.PaperSize=new PaperSize("Default",sheet.Width,sheet.Height); } } pd.DefaultPageSettings.Margins=new Margins(0,0,0,0); pd.OriginAtMargins=true; PrintSituation sit=PrintSituation.Default; pd.DefaultPageSettings.Landscape=sheet.IsLandscape; switch(sheet.SheetType){ case SheetTypeEnum.LabelPatient: case SheetTypeEnum.LabelCarrier: case SheetTypeEnum.LabelReferral: case SheetTypeEnum.LabelAppointment: sit=PrintSituation.LabelSingle; break; case SheetTypeEnum.ReferralSlip: sit=PrintSituation.Default; break; case SheetTypeEnum.Rx: if(isRxControlled){ sit=PrintSituation.RxControlled; } else{ sit=PrintSituation.Rx; } break; case SheetTypeEnum.Statement: sit= PrintSituation.Statement; break; } _printMargin.Top=40;//default top margin if(sheet.SheetType==SheetTypeEnum.MedLabResults) { _printMargin.Top=120; } Sheets.SetPageMargin(sheet,_printMargin); Graphics g=Graphics.FromImage(new Bitmap(sheet.WidthPage,sheet.HeightPage)); g.SmoothingMode=SmoothingMode.HighQuality; g.InterpolationMode=InterpolationMode.HighQualityBicubic;//Necessary for very large images that need to be scaled down. SheetUtil.CalculateHeights(sheet,g,_stmt,_isPrinting,_printMargin.Top,_printMargin.Bottom,_medLab); _sheetList=new List<Sheet>(); for(int i=0;i<copies;i++) { _sheetList.Add(sheet.Copy()); } //later: add a check here for print preview. #if DEBUG FormPrintPreview printPreview; int pageCount=0; foreach(Sheet s in _sheetList) { pageCount+=Sheets.CalculatePageCount(s,_printMargin); } printPreview=new FormPrintPreview(sit,pd,pageCount,sheet.PatNum,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed"); printPreview.ShowDialog(); #else try { if(sheet.PatNum!=null){ if(!PrinterL.SetPrinter(pd,sit,sheet.PatNum,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed")) { return; } } else{ if(!PrinterL.SetPrinter(pd,sit,0,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed")) { return; } } pd.DefaultPageSettings.Margins=new Margins(0,0,0,0); pd.Print(); } catch(Exception ex){ throw ex; //MessageBox.Show(Lan.g("Sheet","Printer not available")); } #endif _isPrinting=false; g.Dispose(); g=null; GC.Collect(); }