一、实现方法如下
1、IDCardGenerate.java
public interface IDCardGenerate {
//public static final String outPath = "D:/gen/idcard.png";
//public static final String outDir = "D:/gen/";
//接口的定义,接口里只包含常量和抽象方法.
public static final String outPath = ".\\idcard.png";//这个是临时文件名
public static final String outDir = ".\\";
public static final String outSuf = ".jpg";
public static final int canvasWidth = 480;
public static final int canvasHeight = 320;
public static final int imgWidth = 270;
public static final int imgHeigth = 428;
public static final int xStart = 60;
public static final int yStart = 85;
public static final int yStep = 32;
public static final int xStep = 90;
public static final int charSpace = 10;
public static final int paramXStart = 110;
public static final int nationSpace = 140;
public static final int monthSpace = 120;
public static final int daySpace = 60;
public static final int idNoSpace = 80;
public static final int charLineSpace = 25;
public void paint();
}
2、IDCardGeneratorFront .java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class IDCardGeneratorFront implements IDCardGenerate {
private IDCardInfo idCard = null;
@SuppressWarnings("unused")
private IDCardGeneratorFront(){
}
public IDCardGeneratorFront(IDCardInfo idCard) throws Exception{
if(null == idCard){
throw new Exception("IDCardinfo object can not be null!");
}
this.idCard = idCard;
}
@Override
public void paint(){
BufferedImage bi = new BufferedImage(canvasWidth, canvasHeight,
BufferedImage.TYPE_INT_ARGB);//构造一个类型为预定义图像类型之一的 BufferedImage
Graphics2D g2d = getTemplateFront(bi);
Font font = new Font("华文细黑",Font.BOLD,16);//可不定义
g2d.setPaint(Color.black);//给写入的个人信息文本设置为黑色
//g2d.setFont(font);
int ypStep = 0;
int xpStep = 0;
//姓名参数
g2d.drawString(idCard.getName(), paramXStart, yStart);
//性别参数
ypStep = yStart + yStep;
g2d.drawString(idCard.getSex(), paramXStart, ypStep);
//民族参数
xpStep = xStart + nationSpace;
g2d.drawString(idCard.getNation(), xpStep, ypStep);
//出生参数
//幄1�7
ypStep += yStep;
g2d.drawString(idCard.getBornYear(), paramXStart, ypStep);
//朄1�7
xpStep = xStart + monthSpace;
g2d.drawString(idCard.getBornMonth(), xpStep, ypStep);
//旄1�7
xpStep += daySpace;
g2d.drawString(idCard.getBornDay(), xpStep, ypStep);
//住址参数
ypStep += yStep;
g2d.drawString(idCard.getAddr1(), paramXStart, ypStep);
//地址换行处理
g2d.drawString(idCard.getAddr2(), paramXStart, ypStep + charLineSpace);
//身份证号
ypStep += idNoSpace;
xpStep = xpStep - daySpace;
//font = new Font(Font.MONOSPACED,Font.BOLD,20);
//g2d.setFont(font);
g2d.drawString(idCard.getIdNo(), xpStep, ypStep + 10);
g2d.dispose();
try {
ImageIO.write(bi, "PNG", new File(outPath));// 使用支持给定格式的任意 ImageWriter 将一个图像写入 File
File imgFile = new File(outPath);//通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
String imgName = String.valueOf(System.currentTimeMillis());
imgFile.renameTo(new File(outDir + imgName + outSuf));//重新命名此抽象路径名表示的文件。
} catch (IOException e) {
e.printStackTrace();
} finally{
}
}
private Graphics2D getTemplateFront(BufferedImage bi) {//该方法是用来获取模板样式
Graphics2D g2d = bi.createGraphics();
int ypStep = 0;
int xpStep = 0;
Font font = new Font("黑体",Font.BOLD,14);
//设置背景艄1�7
g2d.setBackground(Color.white);//白色背景
g2d.clearRect(0, 0, canvasWidth, canvasWidth);
//g2d.fillRect(0, 0, canvasWidth, canvasWidth);
//绘制圆角矩形
g2d.setPaint(Color.black);//矩形边框颜色
RoundRectangle2D rr = new RoundRectangle2D.Double(30,30,428,270,20,20);//设置圆角
g2d.draw(rr);//要呈现的轮廓
//姓名
g2d.setPaint(Color.BLUE);//这是为模板字体设置为蓝色
//g2d.setFont(font);//调试用的
//姓名
g2d.drawString("姓名", xStart, yStart);//首字符的基线位于用户空间的1�7 (x, y) 位置处1�7
ypStep = yStart + yStep;
//性 别
g2d.drawString("性 别", xStart, ypStep);
//pStep += yStep;
//民 族
xpStep =xStart + xStep;
g2d.drawString("民 族",xpStep , ypStep);
ypStep += yStep;
//出 生
g2d.drawString("出 生", xStart, ypStep);
//ypStep += yStep;
xpStep = xStart + xStep;
//年
g2d.drawString("年", xpStep, ypStep);
//月
xpStep += xStart;
g2d.drawString("月", xpStep, ypStep);
//日
xpStep += xStart;
g2d.drawString("日", xpStep, ypStep);
//住 址
ypStep += yStep;
g2d.drawString("住 址", xStart, ypStep);
ypStep += idNoSpace;
//号码
font = new Font("黑体",Font.PLAIN,16);//这里设置颜色有什么用?
g2d.setFont(font);
g2d.drawString("公民身份号码", xStart, ypStep + 10);
//设置头像
try {
//Image img = ImageIO.read(new File("D:/gen/qie2.png"));
Image img = ImageIO.read(new File(".\\qie2.png"));//返回一个 BufferedImage,作为使用 ImageReader(它是从当前已注册 ImageReader 中自动选择的)解码所提供 File 的结果。
g2d.drawImage(img, 300,70,null);// 呈现一个图像,在绘制前进行从图像空间到用户空间的转换。
} catch (IOException e) {
}
return g2d;
// g2d.dispose();
//
// try {
// ImageIO.write(bi, "PNG", new File(outPath));
// } catch (IOException e) {
// e.printStackTrace();
// } finally{
//
// }
}
}
3\IDCardInfo .java
public class IDCardInfo {
private String name = "";
private String sex = "";
private String nation = "";
private String bornYear = "";
private String bornMonth = "";
private String bornDay = "";
private String addr = "";
private String idNo = "";
private String expDate = "";
private String issuingAuthority = "";
private String addr1 = "";
private String addr2 = "";
public String getAddr1() {
addr1 = addr.length() > 11 ?
addr.substring(0,11) : "";
return addr1;
}
public String getAddr2() {
addr2 = addr.length() > 11 ?
addr.substring(11) : "";
return addr2;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getNation() {
return nation;
}
public void setNation(String nation) {
this.nation = nation;
}
public String getBornYear() {
return bornYear;
}
public void setBornYear(String bornYear) {
this.bornYear = bornYear;
}
public String getBornMonth() {
return bornMonth;
}
public void setBornMonth(String bornMonth) {
this.bornMonth = bornMonth;
}
public String getBornDay() {
return bornDay;
}
public void setBornDay(String bornDay) {
this.bornDay = bornDay;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public String getExpDate() {
return expDate;
}
public void setExpDate(String expDate) {
this.expDate = expDate;
}
public String getIssuingAuthority() {
return issuingAuthority;
}
public void setIssuingAuthority(String issuingAuthority) {
this.issuingAuthority = issuingAuthority;
}
}
4\TestGenCard .java
public class TestGenCard {
public static void main(String[] args) {
IDCardInfo idCard = new IDCardInfo();
idCard.setName("赵一");
idCard.setSex("男");
idCard.setNation("汉");
idCard.setBornYear("1999");
idCard.setBornMonth("8");
idCard.setBornDay("8");
idCard.setAddr("陕西省渭南市大荔县黄河镇黄家沟二组");
idCard.setIdNo("622426199908080018");
try {
IDCardGeneratorFront idCardFront = new IDCardGeneratorFront(idCard);
idCardFront.paint();
System.out.println("complete!!!");
} catch (Exception e) {
e.printStackTrace();
}
}
}