zoukankan      html  css  js  c++  java
  • java调用打印机方式二

    一、主类:
    package org.jeecg.print;
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Stroke;
    import java.awt.print.Book;
    import java.awt.print.PageFormat;
    import java.awt.print.Paper;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;


    /**
    * @Author: shafei
    * @Date: 2020-04-15 10:30
    * @Version: V1.0
    * @Description:
    */
    public class PrintTest {
    protected static final String DIAN_MING = "伊晨Bayby童装工厂";
    protected static final String SHOU_HUO_REN = "大飞家";
    protected static final String SHOU_HUO_REN_BEI_ZHU = "无";
    protected static final String MAIJIA_DIZHI = "A区三街01114号";
    protected static final String MAIJIA_DH = "18660665245";
    protected static final String MAIJIA_WX = "yichenbaby0";

    public static void main(String[] args) {
    OrderVo orderVo = new OrderVo();
    orderVo.setBuyer("大飞家");
    orderVo.setRemark("无");
    orderVo.setSeller(DIAN_MING);
    orderVo.setAddress(MAIJIA_DIZHI);
    orderVo.setIphone(MAIJIA_DH);
    orderVo.setWxno(MAIJIA_WX);
    // orderVo.setTotalMoney(0);

    List<ProductVo> products = new ArrayList<ProductVo>();
    ProductVo productVo = new ProductVo();
    productVo.setName("忍者短袖(红)");
    productVo.setPrice(26.00);
    productVo.setAmount(8);
    productVo.setSize("100M");

    ProductVo productVo2 = new ProductVo();
    productVo2.setName("忍者短袖(蓝)");
    productVo2.setPrice(26.00);
    productVo2.setAmount(4);
    productVo2.setSize("103M");
    products.add(productVo);
    products.add(productVo2);
    new PrintTest().printDefault(orderVo, products);
    }

    private void printDefault(final OrderVo orderVo, final List<ProductVo> products ) {
    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);
    // 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,
    // "发件人:"+DIAN_MING+"(微信:yichenbaby0)", 10, yIndex,
    // lineWidth, lineHeight);
    yIndex = drawString(graphics2D, "收货人:" + orderVo.getBuyer(), 10,
    yIndex, lineWidth, lineHeight);
    yIndex = drawString(graphics2D, "收货人备注信息:"
    + orderVo.getRemark(), 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, DIAN_MING, 5, yIndex
    + lineHeight + 20, lineWidth, 12);
    graphics2D.setFont(new Font("宋体", Font.PLAIN, 6));
    graphics2D.setColor(grey);
    // yIndex = drawString(graphics2D, "操作员:金豆 "
    // + getCurrDate(), 5, yIndex + lineHeight + 2,
    // lineWidth, lineHeight);
    yIndex = drawString(graphics2D, "时间:"
    + getCurrDate(), 5, yIndex + lineHeight + 2,
    lineWidth, lineHeight);
    // yIndex = drawString(graphics2D, "日期:"+getCurrDate(), 5 +
    // lineWidth/2, yIndex, lineWidth, lineHeight);
    // yIndex = drawString(graphics2D, "日期:"+getCurrDate(), 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);

    //总合计价格
    int total = 0;
    double totalPrice = 0;
    for (ProductVo productVo : products) {
    graphics2D.setFont(new Font("宋体", Font.PLAIN, 7));
    //商品名称
    yIndex = drawString(graphics2D, productVo.getName(), 5,
    yIndex + 15, (lineWidth / 10) * 7, 10);
    graphics2D.setFont(new Font("宋体", Font.PLAIN, 6));
    graphics2D.setColor(grey);
    // yIndex = drawString(graphics2D, "尺码:" + "100M", 5,
    // yIndex + 11, lineWidth, lineHeight);// 尺码
    //单价
    yIndex = drawString(graphics2D, productVo.getPrice()+"",
    (lineWidth / 10) * 8, yIndex, lineWidth,
    lineHeight);
    //数量
    yIndex = drawString(graphics2D, productVo.getAmount()+"",
    (lineWidth / 10) * 10, yIndex, lineWidth,
    lineHeight);
    graphics2D.setFont(new Font("宋体", Font.PLAIN, 7));
    yIndex = yIndex + 2;
    graphics2D.drawLine(5, yIndex, 5 + lineWidth, yIndex);

    total=total+productVo.getAmount();
    totalPrice=totalPrice+(productVo.getPrice()*productVo.getAmount());
    }
    graphics2D.setColor(defaultColor);
    // yIndex = drawString(graphics2D, "会员名称:小清新", 5, yIndex +
    // lineHeight * 2, lineWidth, lineHeight);
    yIndex = drawString(graphics2D, "总 数:"+total, 5, yIndex
    + lineHeight, lineWidth, lineHeight);
    yIndex = drawString(graphics2D, "总 计:"+totalPrice, 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, "微信:"+orderVo.getWxno(), 5, yIndex
    // + lineHeight * 2, lineWidth, lineHeight);
    yIndex = drawString(graphics2D, "微信:"+MAIJIA_WX, 5, yIndex
    + lineHeight * 2, lineWidth, lineHeight);
    // yIndex = drawString(graphics2D, "地址:" + orderVo.getAddress(), 5,
    // yIndex + lineHeight, lineWidth, lineHeight);
    yIndex = drawString(graphics2D, "地址:" + MAIJIA_DIZHI, 5,
    yIndex + lineHeight, lineWidth, lineHeight);
    yIndex = yIndex + 20;
    graphics2D.drawLine(0, yIndex, 140, yIndex);
    return PAGE_EXISTS;
    }

    private String getCurrDate() {
    Date currDate = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss");
    return sdf.format(currDate);
    }
    }, 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;
    }
    }
    }

    二、需要用到的两个对象
    package org.jeecg.print;

    import lombok.Data;

    /**
    * @Author: shafei
    * @Date: 2020-04-15 10:33
    * @Version: V1.0
    * @Description:
    */
    @Data
    public class ProductVo {
    private String name;
    private double price;
    private int amount;
    private String size;
    private String iphone;
    private String wxno;
    }

    package org.jeecg.print;

    import lombok.Data;

    /**
    * @Author: shafei
    * @Date: 2020-04-15 10:31
    * @Version: V1.0
    * @Description:
    */
    @Data
    public class OrderVo {
    private String buyer;
    private String remark;
    private String seller;
    private String address;
    private String iphone;
    private String wxno;
    }














  • 相关阅读:
    VpnService
    css样式占位和不占位隐藏元素的方法
    apply和call用法
    根据条件改变表格内容
    bootstrap中给表格设置display之后表格宽度变小问题解决
    根据条件决定是否为input设置只读属性
    根据条件决定My97DatePicker日期控件弹出的日期格式
    关于关闭TAB,IFRAME占用的内存不能释放问题
    jquery中attr和prop的区别分析
    jQuery height()、innerHeight()、outerHeight()函数的区别详解
  • 原文地址:https://www.cnblogs.com/chafe/p/12703696.html
Copyright © 2011-2022 走看看