类1:
package com.yu.gogo;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.imageio.ImageIO;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.PrintQuality;
import javax.swing.ImageIcon;
import org.krysalis.barcode4j.impl.code128.Code128Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
public class MainCls {
/**
* 生成文件
*
* @param msg
* @param path
* @return
*/
public static File generateFile(String msg, String path) {
File file = new File(path);
try {
generate(msg, new FileOutputStream(file));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
return file;
}
/**
* 生成字节
*
* @param msg
* @return
*/
public static byte[] generate(String msg) {
ByteArrayOutputStream ous = new ByteArrayOutputStream();
generate(msg, ous);
return ous.toByteArray();
}
public static void generate(String msg, OutputStream ous) {
Code128Bean bean = new Code128Bean();
// 精细度
final int dpi = 150;
// module宽度
final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
// 配置对象
bean.setModuleWidth(moduleWidth);
bean.setModuleWidth(0.35d); //设置条间距
bean.setQuietZone(2); //水平空白
bean.setVerticalQuietZone(1); //垂直空白
bean.setFontSize(3);
bean.doQuietZone(false);
String format = "image/png";
try {
// 输出到流
BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
// 生成条形码
bean.generateBarcode(canvas, msg);
// 结束绘制
canvas.finish();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void setPrint (){
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocFlavor flavor = DocFlavor.BYTE_ARRAY.PNG;
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
for(int i=0;i<printService.length;i++){
String printName = printService[i].getName();
System.out.println(printName);
}
PrintService PS = PrintServiceLookup.lookupDefaultPrintService();
String printName = PS.getName();
System.out.println("当前默认打印机为:"+printName);
System.out.println("如果不争取请在控制面板设置默认打印机");
}
// color #2395439
public static Color getColor(String color) {
if (color.charAt(0) == '#') {
color = color.substring(1);
}
if (color.length() != 6) {
return null;
}
try {
int r = Integer.parseInt(color.substring(0, 2), 16);
int g = Integer.parseInt(color.substring(2, 4), 16);
int b = Integer.parseInt(color.substring(4), 16);
return new Color(r, g, b);
} catch (NumberFormatException nfe) {
return null;
}
}
public static byte[] drawTextInImg(byte[] baseByte, FontText text) {
byte[] retByte = null;
ImageIcon imgIcon = new ImageIcon(baseByte);
Image img = imgIcon.getImage();
int width = img.getWidth(null);
int height = img.getHeight(null);
BufferedImage bimage = new BufferedImage(width+width/3, height+height/3,BufferedImage.TYPE_INT_RGB);
Graphics2D g = bimage.createGraphics();
g.setColor(getColor(text.getWm_text_color()));
g.setBackground(Color.WHITE);
g.clearRect(0, 0, width+width/3, height+height/3);
g.drawImage(img, 30, 30, null);
Font font = null;
if (text.getWm_text_font() != null && text.getWm_text_size() != null) {
font = new Font(text.getWm_text_font(), Font.BOLD,
text.getWm_text_size());
} else {
font = new Font(null, Font.BOLD, 15);
}
g.setFont(font);
FontMetrics metrics = new FontMetrics(font){private static final long serialVersionUID = 1L;};
Rectangle2D bounds = metrics.getStringBounds(text.getText(), null);
//int textWidth = (int) bounds.getWidth();
int textHeight = (int) bounds.getHeight();
int left = 0;
int top = textHeight;
g.drawString(text.getText(), left, top);
g.dispose();
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(bimage, "PNG", out);
retByte = out.toByteArray();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return retByte;
}
public static void printPng (byte[] pbgByte){
try {
DocFlavor dof = DocFlavor.INPUT_STREAM.PNG;
PrintService ps = PrintServiceLookup.lookupDefaultPrintService();
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(OrientationRequested.PORTRAIT);
pras.add(new Copies(1));
pras.add(PrintQuality.HIGH);
DocAttributeSet das = new HashDocAttributeSet();
// 设置打印纸张的大小(以毫米为单位)
das.add(new MediaPrintableArea(0, 0, 210, 296, MediaPrintableArea.MM));
ByteArrayInputStream bin = new ByteArrayInputStream(pbgByte);
Doc doc = new SimpleDoc(bin, dof, das);
DocPrintJob job = ps.createPrintJob();
job.print(doc, pras);
bin.close();
} catch (IOException ie) {
ie.printStackTrace();
} catch (PrintException pe) {
pe.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
String msg = "";
System.out.println("输入0查看默认打印机"+",输入1-9打印");
Properties pps = new Properties();
pps.load(new FileInputStream("C:/base.properties"));
while (true){
int r = System.in.read();
char s = (char)r;
if (s == '0'){
setPrint ();
}
if (s == '1' || s == '2' || s == '3' || s == '4' || s == '5' || s == '6' || s == '7' || s == '8' || s == '9'){
msg = pps.getProperty("code"+s);
String msgx = " ";
if ("true".equals(pps.getProperty("showDate"))){
msgx += new SimpleDateFormat("yyyy/MM/dd").format(new Date());
}
if ("true".equals(pps.getProperty("showNum"))){
int xNum = Integer.valueOf(pps.getProperty("num"));
msgx += " NO."+xNum;
OutputStream out = new FileOutputStream("C:/base.properties");
pps.setProperty("num", String.valueOf(xNum+1));
pps.store(out, "Update num name");
}
byte[] pngByte = generate(msg);
byte[] npngByte = drawTextInImg(pngByte, new FontText(msgx, 1, "#000000", 20, "宋体"));
printPng(npngByte);
}
}
}
}
类2:
package com.yu.gogo;
public class FontText {
private String text;
private int wm_text_pos;
private String wm_text_color;
private Integer wm_text_size;
private String wm_text_font;//字体 “黑体,Arial”
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getWm_text_pos() {
return wm_text_pos;
}
public void setWm_text_pos(int wm_text_pos) {
this.wm_text_pos = wm_text_pos;
}
public String getWm_text_color() {
return wm_text_color;
}
public void setWm_text_color(String wm_text_color) {
this.wm_text_color = wm_text_color;
}
public Integer getWm_text_size() {
return wm_text_size;
}
public void setWm_text_size(Integer wm_text_size) {
this.wm_text_size = wm_text_size;
}
public String getWm_text_font() {
return wm_text_font;
}
public void setWm_text_font(String wm_text_font) {
this.wm_text_font = wm_text_font;
}
public FontText(String text, int wm_text_pos, String wm_text_color,
Integer wm_text_size, String wm_text_font) {
super();
this.text = text;
this.wm_text_pos = wm_text_pos;
this.wm_text_color = wm_text_color;
this.wm_text_size = wm_text_size;
this.wm_text_font = wm_text_font;
}
public FontText(){}
}