using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; namespace SYS_TEST.BaseClass { /// <summary> /// 图片直接打印方法 /// </summary> public class PrintDirectClass { public const int PRINT_INIT = 0; public const int PRINT_FINISH= 1; public const int PRINT_CANCE = 2; public const int PRINT_ERROR = 3; public const int PRINTING = 4; public int result = PRINT_INIT; //打印结果 private int printNum = 0;//多页打印 public Image image = null; public string imageFile = "";//单个图片文件 //private ArrayList fileList = new ArrayList();//多个图片文件 public PrintDirectClass(Image image) { this.image = image; PrintPreview(); } public PrintDirectClass(string imageFile) { this.imageFile = imageFile; PrintPreview(); } public void PrintPreview() { PrintDocument docToPrint = new PrintDocument(); docToPrint.BeginPrint += new System.Drawing.Printing.PrintEventHandler(this.docToPrint_BeginPrint); docToPrint.EndPrint += new System.Drawing.Printing.PrintEventHandler(this.docToPrint_EndPrint); docToPrint.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.docToPrint_PrintPage); docToPrint.DefaultPageSettings.Landscape = false; PrintDialog printDialog = new PrintDialog(); printDialog.AllowSomePages = true; printDialog.ShowHelp = true; printDialog.Document = docToPrint; //if (printDialog.ShowDialog() == DialogResult.OK) //{ docToPrint.Print(); //} //else //{ // result=PRINT_CANCE; //} } private void docToPrint_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) { result=PRINTING; //if (fileList.Count == 0) // fileList.Add(imageFile); } private void docToPrint_EndPrint(object sender, System.Drawing.Printing.PrintEventArgs e) { result=PRINT_FINISH; } private void docToPrint_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { try { //图片抗锯齿 //e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; if (this.image == null) { //Stream fs = new FileStream(fileList[i].Trim(), FileMode.Open, FileAccess.Read); Stream fs = new FileStream(imageFile.Trim(), FileMode.Open, FileAccess.Read); System.Drawing.Image image = System.Drawing.Image.FromStream(fs); } //int x = e.MarginBounds.X; //int y = e.MarginBounds.Y; e.Graphics.DrawImage(image,0,0); //按物理尺寸打印 //int width = image.Width; //int height = image.Height; if ((width / e.MarginBounds.Width) > (height / e.MarginBounds.Height)) { width = e.MarginBounds.Width; height = image.Height * e.MarginBounds.Width / image.Width; } else { height = e.MarginBounds.Height; width = image.Width * e.MarginBounds.Height / image.Height; } DrawImage参数根据打印机和图片大小自行调整 //System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(x, y, width, height); //e.Graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Point); //System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(x, y, width, height); //System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(0, 0, width, height); //if (image.Height < 310) //{ // e.Graphics.DrawImage(image, 0, 30, image.Width + 20, image.Height); // // System.Drawing.Rectangle destRect1 = new System.Drawing.Rectangle(0, 30, image.Width, image.Height); // // e.Graphics.DrawImage(image, destRect1, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Pixel); //} //else //{ // e.Graphics.DrawImage(image, 0, 0, image.Width + 20, image.Height); // // System.Drawing.Rectangle destRect2 = new System.Drawing.Rectangle(0, 0, image.Width, image.Height); // // e.Graphics.DrawImage(image, destRect2, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Pixel); //} //if (printNum < fileList.Count - 1) //{ // printNum++; // e.HasMorePages = true;//HasMorePages为true则再次运行PrintPage事件 // return; //} e.HasMorePages = false; } catch (Exception ex) { result = PRINT_ERROR; } } } }