文献种类:专题技术文献;
开发工具与关键技术:Visual Studio 2015 后台生成图片及下载
作者: ;年级: ;撰写时间: 年 月 日
文献编号: ;归档时间: 月 日
后台生成图片
开发工具与关键技术:Visual
Studio 2015 后台生成图片及下载
作者:廖茂
撰写时间:2019年5月16日
在做项目的过程中,总会碰到一些功能是比较有意思的,这次要说的是怎样在后台生成图片。
在这里,我们要生成的图片是一个证书,证书原始图片如下:
需要把“姓名、时间、分数、证书编号、颁发时间”这些信息放进图片里面生成一张完整的证书图片,页面的操作步骤为“选择一个表格里面的一条数据—>点击生成图片按钮—>生成证书图片”,首先是第一步:
选择表格的一条数据,每次只能生成一张图片,然后点击一个生成图片的按钮:
然后生成一张图片:
步骤介绍完了,接下来进入代码的编写。
首先编写视图里面的方法:
首先我们需要获取到选中的行数,然后判断当前是否只选择一条数据,如果行数等于一,就声明一个变量获取证书ID,然后用window中的open方法打开生成图片的页面,open方法中的路径连接的是控制器中的控制流程方法,同时把参数传到控制器。再判断如果行数大于一,则返回“只能选择一条数据生成图片”的提示,,如果行数等于零,则返回“请选择一条数据生成图片”,代码如下:
if (checkStatus.data.length == 1){
var CertificateID = checkStatus.data[0].CertificateID;
window.open("DownloadCert?certificateId=" + CertificateID);
}
else if (checkStatus.data.length > 1)
{
layer.alert("只能选择一条数据生成图片!")
}
else {
layer.alert("请选择一条数据生成图片!")
}
在这个操作中,表格中的数据涉及到数据库中的四张表,“证书表、成绩表、用户表、学生表”,所以在控制器中需要进行联表查询,把查询到的数据赋值给dbCertificate这个变量:
把证书表、成绩表、用户表和学生表联系起来查询出“考生姓名、考试时间、成绩、证书编号、证书颁发时间”这些数据,数据获取代码如下:
tbStudent.StudentName,
tbAchievement.StTime,
tbAchievement.Achievement,
tbCertificate.CertificateNumber,
tbCertificate.IssuanceTime
数据获取到了,就要有一个把数据写进去的图片,那么就要通过物理路径获取一张图片:
string filePath = Server.MapPath("~/Content/images/Credential2.png");
到了这一步,我们需要添加一个引用,用于下面图片的转换等操作:
using System.Drawing;
添加完引用后,为了能把数据绘制进图片里面,所以需要把图片转化为位图(栅格图),转换成位图(栅格图)之后,我们就可以用像素以横纵坐标的方式确定绘制数据的位置:
Bitmap bitmap = new Bitmap(filePath);
然后封装一个图面:
Graphics g = Graphics.FromImage(bitmap);
接着定义一个单色的画笔,用于绘制数据,颜色可以自行选择:
SolidBrush solidBrush = new SolidBrush(Color.Black);
接下来开始绘制数据,第一个是姓名:
g.DrawString(dbCertificate.StudentName, new Font("宋体", 14), solidBrush, 110, 146);
上面代码中的DrawString得用法是“DrawString(要绘制的文本内容,使用的字体,绘制文本的画刷,开始绘制的坐标点)”,这样就能把数据绘制到图片里面了,接着来绘制第二个数据“时间”:
绘制时间的时候需要注意,因为时间的年、月、日是分开的,所以需要分开绘制,剩下的“成绩、证书编号”两个数据的描绘方法与上面两个相同,最后一个证书颁发时间在图片里面没有内容,所以需要我们自定义,如下:
string strDate = dbCertificate.IssuanceTime.Value.ToString("yyyy年MM月dd日");
g.DrawString(strDate, new Font("宋体", 14), solidBrush, 340, 332);
自定义一个字符串赋值给一个变量,然后再绘制时间。
后台生成图片的整个基本流程就是这样,思路较为简单,设计到多条件查询、图片类型的转换、图片的绘制等方法。