C#批量生成准考证(原创)

利用他可以批量生成准考证、生成完还可以加上批量发送准考证

2009022709211753.jpg

 

最近在做一个考试系统,遇到一点小问题:考生填完个人信息交完考费需要拿着准考证去考试,为了让考生拿到准考证的过程更为傻瓜话,也防止考生再次修改信息,直接把所填信息生成为一张固定大小的jpg图片,再给图片加写杂点和曲线,这样安全和方便基本上就能顾到了,所以我就用c#画了这样一个准考证样板,希望大家能用的着,不足之处多多提出。
    效果图
   代码如下
sing System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Drawing;
using  System.Drawing.Imaging;
using  System.IO;
public   partial   class  _Default : System.Web.UI.Page 
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
if  ( ! IsPostBack)
        {
            gethua();            
        }
    }
    
protected   void  gethua()
    {
        Random random 
=   new  Random();
        Bitmap bt 
=   new  Bitmap( 351 402 , PixelFormat.Format24bppRgb);
        Graphics g 
=  Graphics.FromImage(bt);
        Font fn1 
=   new  Font( " Tahoma " 10 , FontStyle.Bold);         
        Font fn 
=   new  Font( " Tahoma " 9 , FontStyle.Bold);     
        g.Clear(Color.Honeydew);
        g.DrawString(
" 中国电子学会电子设计初级工程师认证考试名 " , fn1, Brushes.Black,  new  PointF( 20 20 ));
        g.DrawString(
" 准 考 证 " , fn1, Brushes.Black,  new  PointF( 140 50 ));
        g.DrawString(
" 准考证号 " , fn, Brushes.Black,  new  PointF( 14 85 ));
        g.DrawString(
" CIE09101080004 " , fn, Brushes.Black,  new  PointF( 90 85 ));
        g.DrawString(
" 考生姓名 " , fn, Brushes.Black,  new  PointF( 14 115 ));
        g.DrawString(
" 李晓杰 " , fn, Brushes.Black,  new  PointF( 90 115 ));
        g.DrawString(
" 考生性别 " , fn, Brushes.Black,  new  PointF( 14 145 ));
        g.DrawString(
" " , fn, Brushes.Black,  new  PointF( 90 145 ));
        g.DrawString(
" 身份证号 " , fn, Brushes.Black,  new  PointF( 14 175 ));
        g.DrawString(
" 410381198408272032 " , fn, Brushes.Black,  new  PointF( 90 175 ));
        g.DrawString(
" 考试时间 " , fn, Brushes.Black,  new  PointF( 14 205 ));
        g.DrawString(
" 2007年11月30号 " , fn, Brushes.Black,  new  PointF( 90 205 ));
        g.DrawString(
" 考试科目 " , fn, Brushes.Black,  new  PointF( 14 235 ));
        g.DrawString(
" 电子设计 " , fn, Brushes.Black,  new  PointF( 90 235 ));
        g.DrawString(
" 考点名称 " , fn, Brushes.Black,  new  PointF( 14 265 ));
        g.DrawString(
" 电子设计工程师证书 " , fn, Brushes.Black,  new  PointF( 90 265 ));
        g.DrawString(
" 考场编号 " , fn, Brushes.Black,  new  PointF( 14 295 ));
        g.DrawString(
" 9101080004 " , fn, Brushes.Black,  new  PointF( 90 295 ));
        g.DrawString(
" 机位编号 " , fn, Brushes.Black,  new  PointF( 196 295 ));
        g.DrawString(
" 080004 " , fn, Brushes.Black,  new  PointF( 275 295 ));
        g.DrawString(
" 交通指南(由各考点提供) " , fn, Brushes.Black,  new  PointF( 14 325 ));
        
string  dizhi  =   "" ;
                    
int  j  =   320 ;     // 初始坐标
                     for  ( int  z  =   0 ; z  <   61 ; z  +=   23 )   // 循环次数 
                    {
                        
int  k  =  z  +   20 ;   //  第一次为0时 
                         if  (k  >  dizhi.Length)   // k是否大于总字数
                        {
                            k 
=  dizhi.Length  -  k;   //  若大于比如k=45  dizhi.length=40  k=40-45    k=-5
                             int  i  =  k  +   20 ;       // i = -5+20  这样就不至于截取超出范围
                            g.DrawString(dizhi.Substring(z, i), fn, Brushes.Black,  new  PointF( 14 , j  +=   18 ));
                            
break ;
                        }
                        g.DrawString(dizhi.Substring(z, 
23 ), fn, Brushes.Black,  new  PointF( 14 , j  +=   18 ));
                    }
                    
// 产生杂点
                     for  ( int  i  =   0 ; i  <   500 ; i ++ )
                    {
                        
int  x1  =  random.Next(bt.Width  -   20 );
                        
int  y1  =  random.Next(bt.Height  -   20 );
                        bt.SetPixel(x1, y1, Color.FromArgb(random.Next()));
                    }
                    
// 产生随机曲线
                     for  ( int  i  =   0 ; i  <   50 ; i ++ )
                    {
                        
int  x1  =  random.Next(bt.Width  -   20 );
                        
int  y1  =  random.Next(bt.Height  -   20 );
                        
int  x2  =  random.Next( 1 30 );
                        
int  y2  =  random.Next( 1 20 );
                        
int  x3  =  random.Next( 15 45 );
                        
int  y3  =  random.Next( 70 270 );
                        g.DrawArc(
new  Pen(Color.FromArgb(random.Next())), x1, y1, x2, y2, x3, y3);
                    }
                    
// 画直线
                    g.DrawLine( new  Pen(Color.Black),  10 75 341 75 );
                    g.DrawLine(
new  Pen(Color.Black),  10 105 243 105 );
                    g.DrawLine(
new  Pen(Color.Black),  10 135 243 135 );
                    g.DrawLine(
new  Pen(Color.Black),  10 165 243 165 );
                    g.DrawLine(
new  Pen(Color.Black),  10 195 341 195 );
                    g.DrawLine(
new  Pen(Color.Black),  10 225 341 225 );
                    g.DrawLine(
new  Pen(Color.Black),  10 255 341 255 );
                    g.DrawLine(
new  Pen(Color.Black),  10 285 341 285 );
                    g.DrawLine(
new  Pen(Color.Black),  10 315 341 315 );
                    g.DrawLine(
new  Pen(Color.Black),  80 75 80 314 );
                    g.DrawLine(
new  Pen(Color.Black),  185 285 185 314 );
                    g.DrawLine(
new  Pen(Color.Black),  265 285 265 314 );
                    g.DrawLine(
new  Pen(Color.Black),  243 75 243 195 );
                    
// 画方框
                    g.DrawRectangle( new  Pen(Color.Black),  10 10 331 382 );
                    
// 填充图像
                    System.Drawing.Image newimage  =  System.Drawing.Image.FromFile(Server.MapPath(sdr[ " photo " ].ToString()));
                    
// 图像定位
                    g.DrawImage(newimage,  245 77 95 117 );
                    
// 释放图像缓存
                    g.Dispose();
                    
// 定义产生图片格式
                    
// Response.ContentType = "image/Jpeg";
                    
// bt.Save(Response.OutputStream, ImageFormat.Jpeg);
                    
// 图片自动保存路径
                     string  dirpath  =   @" E:\Exam\client\Admin_exam\zkz_image\ " ;
                    
if  ( ! Directory.Exists(dirpath))
                    {
                        Directory.CreateDirectory(dirpath);
                    }
                    
// bt.Save(Server.MapPath(dirpath + Session.SessionID + ".jpg"), ImageFormat.Jpeg);
                     string  lujing  =   @" E:\Exam\client\Admin_exam\zkz_image\ "   +  Request.QueryString[ " id " ].ToString()  +   " - "   +  DateTime.Now.ToString( " yyyy-mm-dd " +   " .jpg " ;
                    bt.Save(lujing, ImageFormat.Jpeg);
                    
// 释放位图缓存
                    bt.Dispose();   
    }   
}

转载于:https://www.cnblogs.com/zhjzwl/archive/2009/02/27/1399248.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
批量生成39码(Code 39)条形码并保存到Excel中,您可以使用C#中的BarcodeLib库和EPPlus库来实现。以下是一个示例代码: 首先,确保在项目中引用了BarcodeLib和EPPlus库。 ```csharp using BarcodeLib; using OfficeOpenXml; ``` 然后,可以使用以下代码来生成39码条形码并保存到Excel中: ```csharp // 创建一个新的Excel文件 using (ExcelPackage package = new ExcelPackage()) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Barcodes"); // 生成39码条形码并保存到Excel中 Barcode barcode = new Barcode(); int startingRow = 1; for (int i = 1; i <= 10; i++) // 生成10个条形码,可以根据需求进行调整 { string barcodeText = "CODE" + i.ToString(); // 条形码文本 Image barcodeImage = barcode.Encode(TYPE.CODE39, barcodeText, Color.Black, Color.White, 300, 100); // 生成39码条形码图片 // 将图片插入到Excel单元格中 ExcelPicture excelPicture = worksheet.Drawings.AddPicture("Barcode" + i.ToString(), barcodeImage); excelPicture.SetPosition(startingRow, 1); // 调整单元格大小以适应图片 worksheet.Row(startingRow).Height = barcodeImage.Height; startingRow++; // 下一行 } // 保存Excel文件 FileInfo excelFile = new FileInfo("C:\\Path\\to\\your\\ExcelFile.xlsx"); package.SaveAs(excelFile); } ``` 上述代码将在Excel文件的名为"Barcodes"的工作表中生成10个39码条形码,并将它们保存到指定的Excel文件中。您可以根据需要更改生成的条形码数量和Excel文件的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值