#region 预览前绘图
        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {            
            int x = 0;
            int y = 0;
            int panHeight = panel1.Height;
            decimal count = 0;
            if (panHeight > 1123)
            {
                count = (panHeight / 1123) + 1;            }
            Bitmap img = new Bitmap(panel1.Width,panHeight);
            Graphics g = e.Graphics;
            this.panel1.DrawToBitmap(img,new Rectangle(new Point(0,0),panel1.Size));
                        img.Save("c:\\save.jpg");            for (int i = 1; i < count; i++)
            {                
                imgs = img.Clone(new Rectangle(x, y, 795, 1123), img.PixelFormat);
                g.DrawImage(imgs, new Rectangle(0, 0, panel1.Width, 1123));
                //imgs.Save("c:\\save"+i+".jpg");
                y += 1123;
            }        }可是每次只打印了最后一张.请问要如何实现批量打印图片,这些图是我从一张大图上切下来的小图.imgs.Save("c:\\save"+i+".jpg");只是为了测试图片是否成功存下来...我查了下图片是保存下来了.可是打印还是只打最后一张...

解决方案 »

  1.   

    Example: SimpleImageHandler.ashx
    <%@ WebHandler Language="C#" Class="SimpleImageHandler" %>using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Web;
    using System.Web.Caching;public class SimpleImageHandler : IHttpHandler {    public void ProcessRequest(HttpContext context)
        {
            // Load image.
            Bitmap bmap = new Bitmap(@"C:\Temp\TEST.JPG");        // You could do something here, e.g. add some texts to image.
            
            // Send back image.
            context.Response.ContentType = "image/jpeg";
            context.Response.BufferOutput = false;
            bmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);
        }    public bool IsReusable
        {
            get
            {
                return false;
            }
        }}这是打印一张的例子,你可以遍历文件,整个队列打印。
      

  2.   

    这些图我是在这个事件中生成的...下面不是一个FOR了.结果还是只打最后一张
      

  3.   

            Bitmap imgs;
            decimal count = 0;
            decimal count1 = 0;
            int x = 0;
            int y = 0;        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
        
                int panHeight = panel1.Height;            int height = 61;    
                if (panHeight > height)
                {
                    count =(int)System.Math.Ceiling(panHeight /(double) height);            }
                Bitmap img = new Bitmap(panel1.Width, panHeight);
                Graphics g = e.Graphics;
                this.panel1.DrawToBitmap(img, new Rectangle(new Point(0, 0), panel1.Size));
                imgs = img.Clone(new Rectangle(x, y, 195, height), img.PixelFormat);            g.DrawImage(imgs, new Rectangle(0, 0, panel1.Width, height));
                //imgs.Save("d:\\save" + count1.ToString() + ".jpg");
                y += height;
                count1 += 1;
                img.Dispose();
                imgs.Dispose();
                if (count1 == count)
                {
                    e.HasMorePages = false;
                }
                else
                {
                e.HasMorePages = true;
                }
            }
    因为你是将大小一样但是图片内容不同的图片打印在同一页纸的同一位置,所以你只能看到最后一张图片
    的效果,前面的都被覆盖了。
    你可以选择打印在不同页,也可以打印在同一页的不同位置上。上面的是分页打印,同页打印的你要重新计算每张图片的坐标