package www.pdwy.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.print.PrinterException;
import java.io.File;
import javax.imageio.ImageIO;
import www.pdwy.model.Tblbzmdz;
import com.swetake.util.Qrcode;
public class PrintService {
public static String SWETAKE = "swetake";// 日本造
// TDBCTools支持的编码格式,可以自行添加
public static String GBK = "GBK";
public static String UTF8 = "UTF-8";
// 根据编码的信息生成二维码固定大小的BufferedImage
public BufferedImage encodeToIOStream(String codeTpye, String codeInfo,
String charset, int width, int height) {
if (codeTpye.equals("swetake")) {
BufferedImage imgBuf = swetakeEncode(codeInfo, charset);
BufferedImage outImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_BGR);
outImage.getGraphics().drawImage(imgBuf.getScaledInstance(width, height,
Image.SCALE_SMOOTH), 0, 0, null);
return outImage;
}
System.out.println("编码格式不支持");
return null;
}
// 根据编码的信息生成固定大小的二维码图片,保存到savePath路径下
public void encodeToImg(String codeTpye, String codeInfo, String savePath,
String charset, int width, int height) {
if (codeTpye.equals("swetake")) {
File f = new File(savePath);
BufferedImage imgBuf = swetakeEncode(codeInfo, charset);
BufferedImage outImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_BGR);
outImage.getGraphics()
.drawImage(
imgBuf.getScaledInstance(width, height,
Image.SCALE_SMOOTH), 0, 0, null);
try {
ImageIO.write(outImage, "jpeg", f);
System.out.println(ImageIO.read(f).getHeight() + "---"
+ ImageIO.read(f).getWidth());
System.out.println("二维码生成成功,文件保存路径为:" + savePath);
} catch (Exception e) {
System.out.println("二维码输出失败,文件保存路径为:" + savePath);
e.printStackTrace();
}
}
}
// 根据编码的信息生成二维码BufferedImage
private BufferedImage swetakeEncode(String codeInfo, String charset) {
Qrcode qrcode = new Qrcode();
qrcode.setQrcodeErrorCorrect('L');
qrcode.setQrcodeEncodeMode('B');
byte[] d;
try {
d = codeInfo.getBytes(charset);
} catch (Exception e) {
System.out.println("根据" + charset + "获取编码信息失败,请更换编码方式");
return null;
}
int qrcodeVersion = getQrcodeVersionLevel(d.length);
qrcode.setQrcodeVersion(qrcodeVersion);
int imgLen = 68 + (qrcodeVersion - 1) * 12;
BufferedImage bi = new BufferedImage(imgLen, imgLen,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setBackground(Color.WHITE);
g.clearRect(0, 0, imgLen, imgLen);
g.setColor(Color.BLACK);
if (d.length > 0) {
boolean[][] b = qrcode.calQrcode(d);
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b.length; j++) {
if (b[j][i]) {
g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);
}
}
}
}
g.dispose();
bi.flush();
return bi;
}
// 根据需要编码的信息的长度决定QrcodeVersion
private int getQrcodeVersionLevel(int len) {
System.out.println(len);
if (len <= 15) {
return 1;
} else if (len > 15 && len <= 30) {
return 2;
} else if (len > 30 && len <= 51) {
return 3;
} else if (len > 51 && len <= 78) {
return 4;
} else if (len > 78 && len <= 105) {
return 5;
} else if (len > 105 && len <= 132) {
return 6;
} else if (len > 132 && len <= 153) {
return 7;
} else if (len > 153 && len <= 192) {
return 8;
} else if (len > 192 && len <= 228) {
return 9;
} else if (len > 228 && len <= 270) {
return 10;
} else if (len > 270 && len <= 321) {
return 11;
} else if (len > 321 && len <= 366) {
return 12;
} else if (len > 366 && len <= 423) {
return 13;
} else if (len > 423 && len <= 456) {
return 14;
} else if (len > 456 && len <= 519) {
return 15;
} else {
return 20;
}
}
public static void main(String[] args) {
String codeInfo = "http://www.baidu.com/";
String FilePath = "E:\\123456.jpeg";//网络保存地址为ewmImages/image.jpeg,数据库保存地址为image.jpeg
PrintService tdbc = new PrintService();
// System.out.println(codeInfo.length());
tdbc.encodeToImg(SWETAKE, codeInfo, FilePath, UTF8, 120, 120);
}
public int createImg(String url, Tblbzmdz symdz) throws PrinterException {
try {
BufferedImage bi = new BufferedImage(symdz.getDyzk().intValue(),
symdz.getDyzg().intValue(), 1);
Graphics2D g2 = bi.createGraphics();
g2.setBackground(Color.WHITE);
g2.clearRect(0, 0, symdz.getDyzk().intValue(), symdz.getDyzg()
.intValue());
g2.setColor(Color.BLACK);
symdz.setWzdx(symdz.getWzdx() + 2);
PrintService tdbc = new PrintService();
BufferedImage bimg = tdbc.encodeToIOStream(PrintService.SWETAKE,
symdz.getSym(), PrintService.UTF8, 120, 120);
g2.drawImage(bimg.getScaledInstance(symdz.getSymtpk().intValue(),
symdz.getSymtpg().intValue(), 4), symdz.getSymtpx()
.intValue(), symdz.getSymtpy().intValue(), null);
Font font0 = new Font(symdz.getWzzt(), symdz.getWzys(),
symdz.getWzdx() + 2);
g2.setFont(font0);
if (symdz.getTitleisshow() == 1) {
g2.drawString(symdz.getTitle(), symdz.getTitlex().intValue(),
symdz.getTitley().intValue());
}
Font font1 = new Font(symdz.getWzzt(), symdz.getWzys(),
symdz.getWzdx());
g2.setFont(font1);
String[] strs = symdz.getWz().split("\\|");
int num = 0;
int x = symdz.getWzx().intValue();
int y = symdz.getWzy().intValue() + symdz.getWzdx()
+ symdz.getWzjj().intValue();
for (int j = 0; j < strs.length; j++) {
String str = strs[j];
g2.drawString(str, x, y + (num * (symdz.getWzdx() + symdz.getWzjj().intValue() + 2)));
num++;
}
bi.flush();
File f = new File(url);
ImageIO.write(bi, "bmp", f);
} catch (Exception ex) {
throw new PrinterException(ex.getMessage());
}
return 0;
}
}