源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Java编程打印购物小票实现代码

  • 时间:2022-12-01 15:41 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java编程打印购物小票实现代码
简单介绍运行环境: 语言:Java 工具:eclipse 系统:Windows7 (打印设备暂时没有,所以只能提供预览图) 最近,项目需要为商城做一个购物小票的打印功能,日常我们去超市买东西,结账的时候收银员都会打印一个小票,一般的商城也都需要这样的一个小功能,本文给出的 demo 是在 58mm 的热敏打印机下的例子,如果是其他纸张类型的打印机,调整纸张宽度即可。
package test;
import java.awt.*;
import java.awt.print.*;
/**
 * 打印机测试类(58mm)
 * 1、目标打印机必须设置为默认打印机
 * 2、打印页面的宽度和具体的打印机有关,一般为打印纸的宽度,需要配置成系统参数
 * 3、一个汉字的宽度大概是12点
 */
public class PrintTest {
 public static void main(String[] args){
  if(PrinterJob.lookupPrintServices().length>0){
   /*
        打印格式
       */
   PageFormat pageFormat = new PageFormat();
   //设置打印起点从左上角开始,从左到右,从上到下打印
   pageFormat.setOrientation(PageFormat.PORTRAIT);
   /*
        打印页面格式设置
       */
   Paper paper = new Paper();
   //设置打印宽度(固定,和具体的打印机有关)和高度(跟实际打印内容的多少有关)
   paper.setSize(140, 450);
   //设置打印区域 打印起点坐标、打印的宽度和高度
   paper.setImageableArea(0, 0, 135, 450);
   pageFormat.setPaper(paper);
   //创建打印文档
   Book book = new Book();
   book.append(new Printable() {
    @Override
            public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
     if(pageIndex>0){
      return NO_SUCH_PAGE;
     }
     Graphics2D graphics2D = (Graphics2D) graphics;
     Font font = new Font("宋体", Font.PLAIN, 5);
     graphics2D.setFont(font);
     drawString(graphics2D, "//////////////////////////////", 10, 17, 119, 8);
     font = new Font("宋体", Font.PLAIN, 7);
     graphics2D.setFont(font);
     int yIndex = 30;
     int lineHeight = 10;
     int lineWidth = 120;
     Color defaultColor = graphics2D.getColor();
     Color grey = new Color(145, 145, 145);
     //收货信息
     yIndex = drawString(graphics2D, "收货人:路人甲", 10, yIndex, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "收货地址:北京市海淀区上地十街10号百度大厦", 10, yIndex + lineHeight, lineWidth, lineHeight);
     //收货信息边框
     Stroke stroke = new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL,0,new float[]{4, 4},0);
     graphics2D.setStroke(stroke);
     graphics2D.drawRect(5, 10, 129, yIndex);
     //药店名称
     lineWidth = 129;
     lineHeight = 8;
     graphics2D.setFont(new Font("宋体", Font.BOLD, 8));
     graphics2D.setColor(defaultColor);
     yIndex = drawString(graphics2D, "北京药店零售小票", 5, yIndex + lineHeight + 20, lineWidth, 12);
     graphics2D.setFont(new Font("宋体", Font.PLAIN, 6));
     graphics2D.setColor(grey);
     yIndex = drawString(graphics2D, "操作员:小清新", 5, yIndex + lineHeight + 2, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "日期:2017-01-05", 5 + lineWidth/2, yIndex, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "品名", 5, yIndex + lineHeight * 2 - 5, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "规格", (lineWidth/10)*4, yIndex, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "单价", (lineWidth/10)*8, yIndex, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "数量", (lineWidth/10)*10, yIndex, lineWidth, lineHeight);
     for (int i=0; i<5; i++){
      graphics2D.setFont(new Font("宋体", Font.PLAIN, 7));
      yIndex = drawString(graphics2D, "E复合维生素B片100片E复合维生素B片100片", 5, yIndex + 15, (lineWidth/10)*7, 10);
      graphics2D.setFont(new Font("宋体", Font.PLAIN, 6));
      graphics2D.setColor(grey);
      yIndex = drawString(graphics2D, "100片/盒", 5, yIndex + 11, lineWidth, lineHeight);
      yIndex = drawString(graphics2D, "14.50", (lineWidth/10)*8, yIndex, lineWidth, lineHeight);
      yIndex = drawString(graphics2D, "2", (lineWidth/10)*10, yIndex, lineWidth, lineHeight);
      graphics2D.setFont(new Font("宋体", Font.PLAIN, 7));
      yIndex = yIndex + 2;
      graphics2D.drawLine(5, yIndex, 5 + lineWidth, yIndex);
     }
     graphics2D.setColor(defaultColor);
     yIndex = drawString(graphics2D, "会员名称:小清新", 5, yIndex + lineHeight * 2, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "总  数:6", 5, yIndex + lineHeight, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "总  计:55.30", 5, yIndex + lineHeight, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "收  款:100.00", 5, yIndex + lineHeight, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "找  零:44.70", 5, yIndex + lineHeight, lineWidth, lineHeight);
     graphics2D.setFont(new Font("宋体", Font.PLAIN, 6));
     graphics2D.setColor(grey);
     yIndex = drawString(graphics2D, "电话:020-123456", 5, yIndex + lineHeight * 2, lineWidth, lineHeight);
     yIndex = drawString(graphics2D, "地址:北京市海淀区上地十街10号百度大厦", 5, yIndex + lineHeight, lineWidth, lineHeight);
     yIndex = yIndex + 20;
     graphics2D.drawLine(0, yIndex, 140, yIndex);
     return PAGE_EXISTS;
    }
   }
   , pageFormat);
   //获取默认打印机
   PrinterJob printerJob = PrinterJob.getPrinterJob();
   printerJob.setPageable(book);
   try {
    printerJob.print();
   }
   catch (PrinterException e) {
    e.printStackTrace();
    System.out.println("打印异常");
   }
  } else{
   System.out.println("没法发现打印机服务");
  }
 }
 /**
   * 字符串输出
   * @param graphics2D  画笔
   * @param text     打印文本
   * @param x       打印起点 x 坐标
   * @param y       打印起点 y 坐标
   * @param lineWidth   行宽
   * @param lineHeight  行高
   * @return 返回终点 y 坐标
   */
 private static int drawString(Graphics2D graphics2D, String text, int x, int y, int lineWidth, int lineHeight){
  FontMetrics fontMetrics = graphics2D.getFontMetrics();
  if(fontMetrics.stringWidth(text)<lineWidth){
   graphics2D.drawString(text, x, y);
   return y;
  } else{
   char[] chars = text.toCharArray();
   int charsWidth = 0;
   StringBuffer sb = new StringBuffer();
   for (int i=0; i<chars.length; i++){
    if((charsWidth + fontMetrics.charWidth(chars[i]))>lineWidth){
     graphics2D.drawString(sb.toString(), x, y);
     sb.setLength(0);
     y = y + lineHeight;
     charsWidth = fontMetrics.charWidth(chars[i]);
     sb.append(chars[i]);
    } else{
     charsWidth = charsWidth + fontMetrics.charWidth(chars[i]);
     sb.append(chars[i]);
    }
   }
   if(sb.length()>0){
    graphics2D.drawString(sb.toString(), x, y);
    y = y + lineHeight;
   }
   return y - lineHeight;
  }
 }
}
运行结果: [img]http://files.jb51.net/file_images/article/201711/20171123145111449.png?20171023145122[/img] 效果预览: [img]http://files.jb51.net/file_images/article/201711/20171123145247979.png?20171023145258[/img] [b]总结[/b] 简单说就是编写一段Java程序,将输出结果另存为[b]“ *.xps  ”[/b]格式文件,由打印机输出,非常简单。希望对大家有所帮助。如有问题欢迎留言指出。感谢朋友们对本站的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部