zoukankan      html  css  js  c++  java
  • C# winform 打印窗体内控件(以图片缩放的形式),核心部分代码

    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Printing;

    int currentY = 0;
    private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {//打印文档
                Graphics g = e.Graphics;//获得绘图对象                    
                //待打印区域宽高打印splitContainer1.Panel1中的内容
                int aWidth = splitContainer1.Panel1.DisplayRectangle.Width;
                int aHeight = splitContainer1.Panel1.DisplayRectangle.Height;
                System.Drawing.Printing.PrintDocument pd = sender as System.Drawing.Printing.PrintDocument;
                //页宽高,Bounds自动会考虑到打印页是横向还是纵向打印 
                int pWidth = pd.DefaultPageSettings.Bounds.Width;
                int pHeight = pd.DefaultPageSettings.Bounds.Height;//如果打印区域宽度大于纸张,进行缩放
                double scale = 0.9;//缩放倍数
                int zWidth = aWidth;
                int zHeight = aHeight;
                if (aWidth >= pWidth * scale)
                {//缩小图片
                    zWidth = Convert.ToInt32(aWidth * scale);
                    zHeight = Convert.ToInt32((zWidth * aHeight) / aWidth);
                }
    
                if (currentY < aHeight)
                {//新建位图存放打印部分
                    Bitmap bmp = new Bitmap(aWidth, aHeight);
                    //将表格转换为位图
                    splitContainer1.Panel1.DrawToBitmap(bmp, new Rectangle(0, 0, aWidth, aHeight));
                    //打印指定位图的指定区域
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                    g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
                    g.DrawImage(bmp,
                        new Rectangle((pWidth - zWidth) / 2, currentY, zWidth, zHeight),//缩放图
                        new Rectangle(0, currentY, bmp.Width, bmp.Height),//源图
                        GraphicsUnit.Pixel);
                }
            }
  • 相关阅读:
    数据库
    java语法
    《Lucene实战(第2版)》 配书代码在IDEA下的编译方法
    lucene学习
    社交关系调研(费)
    微博开发平台java SDK demo学习之examples(demo)
    微博开发平台java SDK demo学习之friendships
    F. Classical? (数论 + 思维 + 推理 + 容斥)
    石子合并问题,经典区间DP
    luoguP2048 [NOI2010]超级钢琴
  • 原文地址:https://www.cnblogs.com/nb08611033/p/8890866.html
Copyright © 2011-2022 走看看