zoukankan      html  css  js  c++  java
  • 使用GDI+画报表

    其实使用GDI+画报表也比较简单,只要设定好坐标就行了

    下面给个例子看看

    View Code
      1  private void button9_Click(object sender, EventArgs e)
      2         {
      3             printDialog1.ShowDialog();  //设置打印文档
      4             printPreviewDialog1.Document = this.printDocument1;
      5             printPreviewDialog1.PrintPreviewControl.Zoom = 1;
      6             printPreviewDialog1.ClientSize = new Size(800, 800);
      7             printPreviewDialog1.ShowDialog();
      8         }
      9 
     10         private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
     11         {
     12             //第一条竖线开始30,100
     13             //第2条竖线坐标开始130,100
     14             //第三条竖线开始230,linebegin,结束230,lineend
     15             //第四条竖线开始340,linebegin,结束340,lineend
     16             //第五条竖线开始460,linebegin,结束460,lineend
     17             //第六条竖线开始670,linebegin,结束670,lineend
     18             //最后一条竖线开始790,100
     19             int y = 50;
     20             int linebegin = 0;
     21             int lineend = 0;
     22             int end = 0;
     23             Font font = new Font("宋体", 10, FontStyle.Regular);
     24             Pen title_pen = new Pen(Color.Black, 1);
     25             e.Graphics.DrawString("专家抽取列表", new Font("宋体", 20, FontStyle.Bold), Brushes.Black, 270, y);
     26             y += 80;
     27             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第一条横线
     28             e.Graphics.DrawString("项目名称", font, Brushes.Black, (20 + (90 - GetWidth("项目名称", font)) / 2 - 5), y + 10);
     29             e.Graphics.DrawString(this.txtname.Text.Trim(), font, Brushes.Black, (110 + (570 - GetWidth(this.txtname.Text.Trim(), font)) / 2 - 5), y + 10);
     30             y += 40;
     31             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第二条横线
     32             e.Graphics.DrawString("招标单位", font, Brushes.Black, (20 + (90 - GetWidth("招标单位", font)) / 2 - 5), y + 10);
     33             e.Graphics.DrawString(this.txtunit.Text.Trim(), font, Brushes.Black, (110 + (570 - GetWidth(this.txtunit.Text.Trim(), font)) / 2 - 5), y + 10);
     34             y += 40;
     35             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第三条横线
     36             e.Graphics.DrawString("抽取时间", font, Brushes.Black, (20 + (90 - GetWidth("抽取时间", font)) / 2 - 5), y + 10);
     37             e.Graphics.DrawString(this.txttime.Text.Trim(), font, Brushes.Black, (110 + (570 - GetWidth(this.txttime.Text.Trim(), font)) / 2 - 5), y + 10);
     38             y += 40;
     39             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第四条横线
     40 
     41             linebegin = y;
     42             //开始画列名
     43             e.Graphics.DrawString("专业", font, Brushes.Black, (20 + (90 - GetWidth("专业", font)) / 2 - 5), y + 10);
     44             e.Graphics.DrawString("姓名", font, Brushes.Black, (110 + (70 - GetWidth("姓名", font)) / 2 - 5), y + 10);
     45             e.Graphics.DrawString("固定电话", font, Brushes.Black, (180 + (90 - GetWidth("固定电话", font)) / 2 - 5), y + 10);
     46             e.Graphics.DrawString("手机", font, Brushes.Black, (270 + (110 - GetWidth("手机", font)) / 2 - 5), y + 10);
     47             e.Graphics.DrawString("工作单位", font, Brushes.Black, (380 + (200 - GetWidth("工作单位", font)) / 2 - 5), y + 10);
     48             e.Graphics.DrawString("职称", font, Brushes.Black, (580 + (110 - GetWidth("职称", font)) / 2 - 5), y + 10);
     49             y += 40;
     50             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第五条横线
     51             //开始画table数据
     52             foreach (DataGridViewRow dr in this.dataGridView2.Rows)
     53             {
     54                 e.Graphics.DrawString(dr.Cells[1].Value.ToString(), font, Brushes.Black, (20 + (90 - GetWidth(dr.Cells[1].Value.ToString(), font)) / 2 - 5), y + 10);
     55                 e.Graphics.DrawString(dr.Cells[2].Value.ToString(), font, Brushes.Black, (110 + (70 - GetWidth(dr.Cells[2].Value.ToString(), font)) / 2 - 5), y + 10);
     56                 int phone = GetWidth(dr.Cells[3].Value.ToString(), font);
     57                 if (phone <= 90)
     58                 {
     59                     e.Graphics.DrawString(dr.Cells[3].Value.ToString(), font, Brushes.Black, (180 + (90 - phone) / 2 - 5), y + 10);
     60                 }
     61                 else
     62                 {
     63                     string _phone = dr.Cells[3].Value.ToString();
     64                     _phone = _phone.Substring(0, 9) + "";
     65                     phone = GetWidth(_phone, font);
     66                     e.Graphics.DrawString(_phone, font, Brushes.Black, (180 + (90 - phone) / 2 - 5), y + 10);
     67                 }
     68                 int mobile = GetWidth(dr.Cells[4].Value.ToString(), font);
     69                 if (mobile <= 100)
     70                 {
     71                     e.Graphics.DrawString(dr.Cells[4].Value.ToString(), font, Brushes.Black, (270 + (110 - mobile) / 2 - 5), y + 10);
     72                 }
     73                 else
     74                 {
     75                     string _mobile = dr.Cells[4].Value.ToString();
     76                     _mobile = _mobile.Substring(0, 11) + "";
     77                     phone = GetWidth(_mobile, font);
     78                     e.Graphics.DrawString(_mobile, font, Brushes.Black, (270 + (110 - phone) / 2 - 5), y + 10);
     79                 }
     80                 e.Graphics.DrawString(dr.Cells[5].Value.ToString(), font, Brushes.Black, (380 + (200 - GetWidth(dr.Cells[5].Value.ToString(), font)) / 2 - 5), y + 10);
     81                 e.Graphics.DrawString(dr.Cells[6].Value.ToString(), font, Brushes.Black, (580 + (110 - GetWidth(dr.Cells[6].Value.ToString(), font)) / 2 - 5), y + 10);
     82                 y += 40;
     83                 e.Graphics.DrawLine(title_pen, 20, y, 690, y);
     84             }
     85             lineend = y;
     86             e.Graphics.DrawString("抽取人签字", font, Brushes.Black, (20 + (90 - GetWidth("抽取人签字", font)) / 2 - 5), y + 10);
     87             y += 40;
     88             e.Graphics.DrawLine(title_pen, 20, y, 690, y);
     89             e.Graphics.DrawString("监督人签字", font, Brushes.Black, (20 + (90 - GetWidth("监督人签字", font)) / 2 - 5), y + 10);
     90             y += 40;
     91             e.Graphics.DrawLine(title_pen, 20, y, 690, y);
     92             end = y;
     93 
     94             //开始画竖线
     95             //e.Graphics.DrawLine(title_pen, 20, 130, 20, y);
     96             //e.Graphics.DrawLine(title_pen, 130, 130, 130, y);
     97             //e.Graphics.DrawLine(title_pen, 210, linebegin, 210, lineend);
     98             //e.Graphics.DrawLine(title_pen, 320, linebegin, 320, lineend);
     99             //e.Graphics.DrawLine(title_pen, 440, linebegin, 440, lineend);
    100             //e.Graphics.DrawLine(title_pen, 670, linebegin, 670, lineend);
    101             //e.Graphics.DrawLine(title_pen, 800, 130, 800, y);
    102             e.Graphics.DrawLine(title_pen, 20, 130, 20, y);
    103             e.Graphics.DrawLine(title_pen, 110, 130, 110, y);
    104             e.Graphics.DrawLine(title_pen, 180, linebegin, 180, lineend);
    105             e.Graphics.DrawLine(title_pen, 270, linebegin, 270, lineend);
    106             e.Graphics.DrawLine(title_pen, 380, linebegin, 380, lineend);
    107             e.Graphics.DrawLine(title_pen, 580, linebegin, 580, lineend);
    108             e.Graphics.DrawLine(title_pen, 690, 130, 690, y);
    109         }
    110 
    111         private int GetWidth(string str, Font myf)
    112         {
    113             Graphics g = Graphics.FromHwnd(this.Handle);
    114 
    115             StringFormat sf = new StringFormat(StringFormat.GenericTypographic);
    116 
    117             SizeF size = g.MeasureString(str, myf, 1000, sf);
    118 
    119             return Convert.ToInt32(size.Width);
    120 
    121         }

    效果

  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/bfyx/p/2851024.html
Copyright © 2011-2022 走看看