您的位置:首页 > 编程语言 > Java开发

java在图片上写入文字-IDNo身份证生成方法

2017-08-18 00:00 691 查看
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、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;
}
}


3、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"));
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{
//
//		}
}
}

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();
}
}
}

执行方法:进入当前java文件目录,打开命令窗口,1、执行javac TestGenCard.java进行编译(若出现乱码,则执行javac -encoding utf-8 TestGenCard.java),2、java TestGenCard执行java文件运行成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: