Java編程打印購物小票實現(xiàn)代碼
簡單介紹運行環(huán)境:
語言:Java
工具:eclipse
系統(tǒng):Windows7
(打印設(shè)備暫時沒有,所以只能提供預(yù)覽圖)
最近,項目需要為商城做一個購物小票的打印功能,日常我們?nèi)コ匈I東西,結(jié)賬的時候收銀員都會打印一個小票,一般的商城也都需要這樣的一個小功能,本文給出的 demo 是在 58mm 的熱敏打印機下的例子,如果是其他紙張類型的打印機,調(diào)整紙張寬度即可。
package test; import java.awt.*; import java.awt.print.*; /** * 打印機測試類(58mm) * 1、目標打印機必須設(shè)置為默認打印機 * 2、打印頁面的寬度和具體的打印機有關(guān),一般為打印紙的寬度,需要配置成系統(tǒng)參數(shù) * 3、一個漢字的寬度大概是12點 */ public class PrintTest { public static void main(String[] args){ if(PrinterJob.lookupPrintServices().length>0){ /* 打印格式 */ PageFormat pageFormat = new PageFormat(); //設(shè)置打印起點從左上角開始,從左到右,從上到下打印 pageFormat.setOrientation(PageFormat.PORTRAIT); /* 打印頁面格式設(shè)置 */ Paper paper = new Paper(); //設(shè)置打印寬度(固定,和具體的打印機有關(guān))和高度(跟實際打印內(nèi)容的多少有關(guān)) paper.setSize(140, 450); //設(shè)置打印區(qū)域 打印起點坐標、打印的寬度和高度 paper.setImageableArea(0, 0, 135, 450); pageFormat.setPaper(paper); //創(chuàng)建打印文檔 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, "http://////////////////////////////", 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, "收貨地址:北京市海淀區(qū)上地十街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, "規(guī)格", (lineWidth/10)*4, yIndex, lineWidth, lineHeight); yIndex = drawString(graphics2D, "單價", (lineWidth/10)*8, yIndex, lineWidth, lineHeight); yIndex = drawString(graphics2D, "數(shù)量", (lineWidth/10)*10, yIndex, lineWidth, lineHeight); for (int i=0; i<5; i++){ graphics2D.setFont(new Font("宋體", Font.PLAIN, 7)); yIndex = drawString(graphics2D, "E復(fù)合維生素B片100片E復(fù)合維生素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, "總 數(shù):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, "地址:北京市海淀區(qū)上地十街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("沒法發(fā)現(xiàn)打印機服務(wù)"); } } /** * 字符串輸出 * @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; } } }
運行結(jié)果:
效果預(yù)覽:
總結(jié)
簡單說就是編寫一段Java程序,將輸出結(jié)果另存為“ *.xps ”格式文件,由打印機輸出,非常簡單。希望對大家有所幫助。如有問題歡迎留言指出。感謝朋友們對本站的支持。
欄 目:Java編程
下一篇:Java編程實現(xiàn)打地鼠文字游戲?qū)嵗a
本文地址:http://mengdiqiu.com.cn/a1/Javabiancheng/8400.html
您可能感興趣的文章
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10Java Socket編程(三) 服務(wù)器Sockets
- 01-10Java進階:Struts多模塊的技巧
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java運行時多態(tài)性的實現(xiàn)
- 01-10Java經(jīng)驗點滴:處理沒有被捕獲的異常
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)器
- 01-10Java中的浮點數(shù)分析
- 01-10面向?qū)ο缶幊?Java中的抽象數(shù)據(jù)類型


閱讀排行
本欄相關(guān)
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10JVM的垃圾回收機制詳解和調(diào)優(yōu)
- 01-10Java Socket編程(三) 服務(wù)器Sockets
- 01-10Java進階:Struts多模塊的技巧
- 01-10J2SE 1.5版本的新特性一覽
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java運行時多態(tài)性的實現(xiàn)
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)
- 01-10Java經(jīng)驗點滴:處理沒有被捕獲的異常
隨機閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文