android自助点单APP(4)java连接小票打印机

原文链接 http://blog.csdn.net/daixinmei/article/details/21173703

package com.lvkang.myfood.printer;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
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.sql.Connection;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashAttributeSet;
import javax.print.attribute.standard.PrinterName;

import com.lvkang.myfood.jdbc.JDBCService;
import com.lvkang.myfood.json.OrderFood;
import com.lvkang.myfood.servlet.Print;

public class Printer implements Printable {

    /**
     * * @param Graphic指明打印的图形环境 * @param
     * PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点) * @param
     * pageIndex指明页号
     **/

    int line = 0;
    long SN;
    String date;
    int todaySN;
    int tableID;
    String Remarks;
    Float price = 0f;
    int page = -1;

    List<OrderFood> orderFoods;

    int startY = 0;
    final int divide = 10;

    public Printer(String orderName, int orderTableID, String orderRemarks,
            List<OrderFood> orderFoods) throws ClassNotFoundException,
            SQLException {

        price = 0f;
        startY = (int) (-10f * (orderFoods.size() - 1) - 100);// 调整输出文档上方空白
        this.tableID = orderTableID;
        this.Remarks = orderRemarks;
        this.orderFoods = orderFoods;
        Connection connection = JDBCService.getConn();
        todaySN = JDBCService.getTodayNum(connection);
        Date today = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        date = df.format(today);

        String orderDateTimeString = date.substring(0, 10);

        String orderDateTimeLongString = "";

        String[] strings = orderDateTimeString.split("-");

        for (int i = 0; i < strings.length; i++) {

            orderDateTimeLongString += strings[i];
        }
        String orderIDString = Long.parseLong(orderDateTimeLongString )*10000+ todaySN+"";

        SN = Long.parseLong(orderIDString);


        connection.close();

    }

    public int print(Graphics gra, PageFormat pf, int pageIndex)
            throws PrinterException {
        page++;

        price = 0f;
        Graphics2D graphics2d = (Graphics2D) gra;

        // 设置打印颜色为黑色
        graphics2d.setColor(Color.black);

        graphics2d.setFont(new Font("Arial", Font.BOLD, 16));
        print(graphics2d, "MyFood", 30);
        line++;

        graphics2d.setFont(new Font("宋体", Font.PLAIN, 9));

        println(graphics2d, "售单号:" + SN);
        println(graphics2d, "时间:" + date);
        println(graphics2d, "您是今天的第:" +todaySN+" 位顾客");

        println(graphics2d, "餐桌号:" + tableID);


        int length=Remarks.length();

        if(length<12){
            print(graphics2d,Remarks,21);
            length=0;
        }
        if(length>=14){

            String firstLine=Remarks.substring(0,14);
            print(graphics2d,firstLine,21);

            length-=14;
        }
        println(graphics2d, "备注:");

        while(length>=16){
            println(graphics2d,Remarks.substring(Remarks.length()-length,Remarks.length()-length+16));
            length-=16;
        }
        if(length>0){
            println(graphics2d,Remarks.substring(Remarks.length()-length));

            length=0;
        }

        println(graphics2d, "*****************************");

        print(graphics2d, "品名", 0);
        print(graphics2d, "单价", 45);
        print(graphics2d, "数量", 74);
        print(graphics2d, "售价", 110);
        line++;
        try {
            Connection connection = JDBCService.getConn();
            for (int i = 0; i < orderFoods.size(); i++) {
                int orderFoodID = orderFoods.get(i).getOrderFoodId();
                String foodName = JDBCService.getFoodName(connection,
                        orderFoodID);

                float foodUnitPrice = JDBCService.getFoodUnitPrice(connection,
                        orderFoodID);
                int orderFoodNum = orderFoods.get(i).getOrderFoodNum();
                float foodPrice = foodUnitPrice * orderFoodNum;

                price += foodPrice;

                print(graphics2d, foodName, 0);
                print(graphics2d, foodUnitPrice + "", 45);
                print(graphics2d, orderFoodNum + "", 74);
                print(graphics2d, foodPrice + "", 110);
                line++;
            }

            connection.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        println(graphics2d, "总价:" + price);
        println(graphics2d, "*****************************");
        println(graphics2d, "        欢迎再次光临");

        return page;
    }

    public void println(Graphics2D graphics2D, String str) {
        this.println(graphics2D, str, 0);
    }

    public void println(Graphics2D graphics2D, String str, int x) {
        graphics2D.drawString(str, (float) x, (float) startY + (float) divide
                * line);
        this.line++;

    }

    public void print(Graphics2D graphics2D, String str, int x) {
        graphics2D.drawString(str, (float) x, (float) startY + (float) divide
                * line);

    }

    public void PrintLabel(String PrintQ) {
        // ReadData();
        // 通俗理解就是书、文档
        Book book = new Book();
        // 设置成竖打
        PageFormat pf = new PageFormat();
        pf.setOrientation(PageFormat.PORTRAIT); // LANDSCAPE表示竖打;PORTRAIT表示横打;REVERSE_LANDSCAPE表示打印空白
        // 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
        Paper p = new Paper();
        p.setSize(130, 6000); // Warranty Paper Size,A4 590, 840
        p.setImageableArea(0, 0, 164, 6000); // Print Area
        pf.setPaper(p);
        // 把 PageFormat 和 Printable 添加到书中,组成一个页面
        book.append(this, pf, 1);
        // book.append(this, pf, this.getPageNum());
        String printerName = PrintQ;
        HashAttributeSet hs = new HashAttributeSet();
        hs.add(new PrinterName(printerName, null));
        // 获取打印服务对象
        PrintService[] printService = PrintServiceLookup.lookupPrintServices(
                null, hs);
        PrinterJob job = PrinterJob.getPrinterJob();
        try {
            if (printService.length > 0) {
                job.setPrintService(printService[0]);
            }
            // 设置打印类
            job.setPageable(book);
            // Print
            job.print();

        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {

        // new PrintTest(orderName, orderTableID, orderRemarks,
        // orderFoods).PrintLabel("null");

    }
}

主要要修改的方法是 public int print(Graphics gra, PageFormat pf, int pageIndex),在里面实现 graphics2D.drawString()方法就行啦

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值