62,616
社区成员
发帖
与我相关
我的任务
分享
public static BufferedImage generatePictrue(TicketFaceClass ticketFaceClass, TicketInfo ticketInfo) throws WriterException, IOException {
TicketFace ticketFace = ticketFaceClass.getTicketFace();
int height = ticketFace.getTicketHeight();
int width = ticketFace.getTicketWidth();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);
Graphics2D graphics = image.createGraphics();
// 初始化画笔
PrinterImage.initGraphics(graphics, width, height);
// 画附券的分割线,及附券
for (int i= 1 ;i <= ticketFace.getSubQuantity();i++){
if(ticketFace.getSubAtleft()){
// graphics.drawLine(ticketFace.getSubWidth()*i,0,ticketFace.getSubWidth()*i,
// ticketFace.getTicketHeight());
}else{
// graphics.drawLine(ticketFace.getTicketWidth()-ticketFace.getSubWidth()*i,0,
// ticketFace.getTicketWidth()-ticketFace.getSubWidth()*i,ticketFace.getTicketHeight());
}
}
for (int i = 0; i <= ticketFaceClass.getTicketElementList().size() - 1; i++) {
TicketElement ticketElementShow = ticketFaceClass.getTicketElementList().get(i);
String elementType = ticketElementShow.getElementType();
// 判读元素的类型,如果是图片类型,绘图.这里图片有个宽度和长度最小值问题.这里图片维护还没有做.
if (elementType.equalsIgnoreCase(IMAGE_TYPE)|| elementType.equalsIgnoreCase(IMAGE_TYPE1)) {
//// String picPath = ticketElementShow.getPath(); // 数据库中Path 还没有定义好.这里怎么处理?
// File imageFile = new File("E://temp//二维码.jpg");
// BufferedImage srcImage = null;
// srcImage = ImageIO.read(imageFile);
//
// int srcWidth = srcImage.getWidth();
//
// int srcHeight = srcImage.getHeight();
//
// double scale = getScale(srcWidth,srcHeight,ticketElementShow.getEleWidth(),ticketElementShow.getEleHeight());
//
// int newWidth = (int) (srcWidth*scale);
//
// int newHeight = (int) (srcHeight*scale);
//
// graphics.drawImage(srcImage.getScaledInstance(newWidth,newHeight,Image.SCALE_SMOOTH),
// ticketElementShow.getEleLef(),ticketElementShow.getEleTop(),null);
}
// 如果类型是二维图片
if (elementType.equalsIgnoreCase(IMAGE_TYPE2) || elementType.equalsIgnoreCase(IMAGE_TYPE3))
{
BitMatrix bitMatrix = defineBitMatrix(ticketElementShow.getCaption(),
ticketElementShow.getEleWidth(),ticketElementShow.getEleHeight(),elementType);
int[] rec = bitMatrix.getEnclosingRectangle();
for (int n =0; n <= rec.length-1;n++)
{
System.out.println(Thread.currentThread().getStackTrace()[1].getClassName() +":"+
Thread.currentThread().getStackTrace()[1].getMethodName()+" "+rec[n]+"---------");
}
int resWidth = rec[2] + 1; // 新的二维码x
int resHeight = rec[3] + 1; // 新的二维码y
BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
resMatrix.clear();
for (int i1 = 0; i1 < resWidth; i1++) {
for (int j = 0; j < resHeight; j++) {
if (bitMatrix.get(i1 + rec[0], j + rec[1])) {
resMatrix.set(i1, j);
}
}
}
drawQRCode(image,ticketElementShow.getEleWidth(),ticketElementShow.getEleHeight(),
ticketElementShow.getEleLef(),ticketElementShow.getEleTop(),bitMatrix);
}
//元素是普通文本或者来自数据库字段类型
if (ticketElementShow.getElementType().equalsIgnoreCase(TEXT_TYPE1) ||
ticketElementShow.getElementType().equalsIgnoreCase(TEXT_TYPE) ){
// 根据字体名称,大小,字体格式定义字体
// Font font = LoadLocalFont("E:/temp/ttf/FZLTZH_GBK_GBK.TTF"); // 方正兰亭中黑
Font font = LoadLocalFont(getFontFilePath(ticketElementShow.getFontName()));
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// graphics.setFont(font);
graphics.setFont(getFormatFont(font,ticketElementShow));
// 要打印内容的x坐标
int xPose = PrinterImage.getFontLocaltion(ticketElementShow, graphics, font).getX();
// 要打印内容的y坐标
int yPose = PrinterImage.getFontLocaltion(ticketElementShow, graphics, font).getY();
graphics.drawString(ticketElementShow.getCaption(), xPose, yPose);
}
}
// drawNetLine(graphics,ticketFace);
return image;
}