importnet.sourceforge.jbarcodebean.JBarcodeBean;importnet.sourceforge.jbarcodebean.model.Code39;importnet.sourceforge.jbarcodebean.model.Ean13;importorg.json.JSONArray;importorg.json.JSONObject;importjavax.print.PrintService;importjavax.print.PrintServiceLookup;import javax.swing.*;import java.awt.*;importjava.awt.image.BufferedImage;import java.awt.print.*;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.URL;importjava.net.URLConnection;importjava.text.SimpleDateFormat;importjava.util.Date;/*** Created by Administrator on 2018/4/29.*/
public class JRPrinterApplet extends JApplet implementsPrintable {
JSONObject jsonObject=newJSONObject();private int imageWidth = 300; //图片的宽度
@Overridepublic voidinit() {
String req_path=this.getParameter("req_path");
String print_type=this.getParameter("print_type");
String print_name=this.getParameter("print_name");
String jsonStr=this.getParameter("json");//链接测速
if(print_type.equals("login_test")){
System.out.println("****连接测试");
String get=urlGet(req_path+"/print/print_error?type=login_test");
System.out.println(get);return;
}else if(print_type.equals("print")){
System.out.println("****连接打印");
jsonObject=newJSONObject(jsonStr);
String id=String.valueOf(jsonObject.get("id"));
System.out.println(print_name+" "+req_path+" "+id+" "+print_type+"\n"+jsonStr);
Book book= newBook();//设置成竖打
PageFormat pf = newPageFormat();
pf.setOrientation(PageFormat.PORTRAIT);//LANDSCAPE表示竖打;PORTRAIT表示横打;REVERSE_LANDSCAPE表示打印空白//通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = newPaper();
p.setSize(imageWidth,300); //纸张大小(590, 840)表示A4纸
p.setImageableArea(0, 0, imageWidth, 300); //A4(595 X842)设置打印区域,其实0,0应该是72,72//,因为A4纸的默认X,Y边距是72
pf.setPaper(p);//把 PageFormat 和 Printable 添加到书中,组成一个页面
book.append(this, pf);//获取打印服务对象
PrinterJob.lookupPrintServices();
PrinterJob job=PrinterJob.getPrinterJob();//设置打印类
job.setPageable(book);
PrintService[] pss= PrintServiceLookup.lookupPrintServices(null,null);//PrintService ps=null;
boolean have_ps=false;for(PrintService printService:pss){
System.out.println("****找到打印机:"+printService.toString());if(printService.toString().contains(print_name)){try{
System.out.println("----找到对应打印机:"+printService.toString());
job.setPrintService(printService);
have_ps=true;
}catch(PrinterException e) {
String services= urlGet(req_path + "/print/print_error?type=Doc_error&id=" + id + "&msg=" +e);
System.out.println(services);
e.printStackTrace();return;
}
}
}if(!have_ps){
String var19= urlGet(req_path + "/print/print_error?type=print_no_find&id=" +id);
System.out.println(var19);
}else{try{//可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
/*boolean a=job.printDialog();
if(a)
{
job.print();
}*/String get=urlGet(req_path + "/print/print_error?type=print_ok&id=" +id);
System.out.println(get);
job.print();
}catch(PrinterException e) {
String get= urlGet(req_path + "/print/print_error?type=print_is_error&id=" + id + "&msg=" +e);
System.out.println(get);
e.printStackTrace();
}
}
}
}public int print(Graphics gra, PageFormat pf, int pageIndex) throwsPrinterException {
Component c= null;
Graphics2D g2=(Graphics2D) gra;double x =pf.getImageableX();double y =pf.getImageableY();switch(pageIndex) {case 0:
g2.drawImage(graphicsGeneration(jsonObject), (int) x, (int) y, c);returnPAGE_EXISTS;default:returnNO_SUCH_PAGE;
}
}publicBufferedImage graphicsGeneration(JSONObject jsonObject) {
String id=String.valueOf(jsonObject.get("id"));
String name=String.valueOf(jsonObject.get("name"));
JSONArray array=jsonObject.getJSONArray("list");int title_h=20;int left_long=10;int row=1;inti;int imageHeight=title_h*(row+7)+80;
BufferedImage image= newBufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);//设置图片的背景色
Graphics2D main =image.createGraphics();
main.setColor(Color.white);
main.fillRect(0, 0, imageWidth, imageHeight);//***********************页面头部
Graphics g =image.createGraphics();
g.fillRect(0, 0, imageWidth, title_h);
g.setColor(Color.white);
Font font= new Font("宋体", Font.BOLD, 14);
g.setFont(font);
g.setColor(Color.BLACK);
g.drawString("***道口义兴张祥记烧鸡老铺***", 50, title_h*row+++3);//其他内容
font = new Font("宋体", Font.PLAIN, 12);
g.setFont(font);
g.drawString("单号:"+id,left_long,title_h*row);
g.drawString("时间:"+new SimpleDateFormat("MM月dd日 HH:mm:ss").format(new Date()),imageWidth/2,title_h*row++);
g.drawString("收货人:"+name,left_long,title_h*row++);
g.drawLine(5,65,295,65);for(i=0;i
JSONObject o=(JSONObject) array.get(i);
g.drawString((i+1)+".",left_long,title_h*row);
g.drawString(o.get("name")+" x"+o.get("num"),left_long+15,title_h*row);
String unit="";if(o.get("unit")!=null&&!o.get("unit").equals("")){
unit="/"+o.get("unit");
}
g.drawString(o.get("money")+unit,240,title_h*row);
row++;
}//生成条维码
JBarcodeBean jBarcodeBean = newJBarcodeBean();//条形码类型//jBarcodeBean.setCodeType(new Ean13());
jBarcodeBean.setCodeType(newCode39());//在条形码下面显示文字
jBarcodeBean.setLabelPosition(JBarcodeBean.LABEL_BOTTOM);
jBarcodeBean.setCode(id);
jBarcodeBean.setBarcodeHeight(50);//条维码
BufferedImage tiao_wei_ma = new BufferedImage(300, 80, BufferedImage.TYPE_INT_RGB);
tiao_wei_ma=jBarcodeBean.draw(tiao_wei_ma);//***********************插入图片
Graphics mainPic =image.getGraphics();if(tiao_wei_ma!=null){
mainPic.drawImage(tiao_wei_ma,0,title_h*(row-1),null);
mainPic.dispose();
}//createImage("F:\\temp/hehe.jpg",image);
returnimage;
}/*** 向指定URL发送GET方法的请求
**/
public staticString urlGet(String url) {
BufferedReader in= null;try{
URL realUrl= newURL(url);//打开和URL之间的连接
URLConnection connection =realUrl.openConnection();//设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);//建立实际的连接
connection.connect();//定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(newInputStreamReader(connection.getInputStream()));
StringBuffer sb= newStringBuffer();
String line;while ((line = in.readLine()) != null) {
sb.append(line);
}returnsb.toString();
}catch(Exception e) {
System.out.println(e);
}//使用finally块来关闭输入流
finally{try{if (in != null) {
in.close();
}
}catch(Exception e2) {
e2.printStackTrace();
}
}return null;
}
}