最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java編程打印購物小票實現(xiàn)代碼

 更新時間:2017年11月23日 14:59:52   作者:RexFang  
這篇文章主要介紹了Java編程打印購物小票實現(xiàn)代碼,具有一定參考價值,需要的朋友可以了解下。

簡單介紹運行環(huán)境:

語言:Java

工具:eclipse

系統(tǒng):Windows7

(打印設備暫時沒有,所以只能提供預覽圖)

最近,項目需要為商城做一個購物小票的打印功能,日常我們?nèi)コ匈I東西,結(jié)賬的時候收銀員都會打印一個小票,一般的商城也都需要這樣的一個小功能,本文給出的 demo 是在 58mm 的熱敏打印機下的例子,如果是其他紙張類型的打印機,調(diào)整紙張寬度即可。

package test;
import java.awt.*;
import java.awt.print.*;
/**
 * 打印機測試類(58mm)
 * 1、目標打印機必須設置為默認打印機
 * 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();
			//設置打印起點從左上角開始,從左到右,從上到下打印
			pageFormat.setOrientation(PageFormat.PORTRAIT);
			/*
        打印頁面格式設置
       */
			Paper paper = new Paper();
			//設置打印寬度(固定,和具體的打印機有關(guān))和高度(跟實際打印內(nèi)容的多少有關(guān))
			paper.setSize(140, 450);
			//設置打印區(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復合維生素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, "總  數(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)打印機服務");
		}
	}
	/**
   * 字符串輸出
   * @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é)果:

效果預覽:

總結(jié)

簡單說就是編寫一段Java程序,將輸出結(jié)果另存為“ *.xps  ”格式文件,由打印機輸出,非常簡單。希望對大家有所幫助。如有問題歡迎留言指出。感謝朋友們對本站的支持。

相關(guān)文章

  • 集群環(huán)境中使用ehcache_動力節(jié)點Java學院整理

    集群環(huán)境中使用ehcache_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了集群環(huán)境中使用ehcache的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • java生成圖片驗證碼返回base64圖片信息方式

    java生成圖片驗證碼返回base64圖片信息方式

    這篇文章主要介紹了java生成圖片驗證碼返回base64圖片信息方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 關(guān)于SpringMVC的異常處理機制詳細解讀

    關(guān)于SpringMVC的異常處理機制詳細解讀

    這篇文章主要介紹了關(guān)于SpringMVC的異常處理機制詳細解讀,SpringMVC是目前主流的Web?MVC框架之一,本文將分析SpringMVC的異常處理內(nèi)容,需要的朋友可以參考下
    2023-05-05
  • SpringBoot項目集成FTP的方法步驟

    SpringBoot項目集成FTP的方法步驟

    本文主要介紹了SpringBoot項目集成FTP的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • SpringBoot超詳細講解集成Flink的部署與打包方法

    SpringBoot超詳細講解集成Flink的部署與打包方法

    昨天折騰了下SpringBoot與Flink集成,實際上集成特簡單,主要是部署打包的問題折騰了不少時間。想打出的包直接可以java -jar運行,同時也可以flink run運行,或者在flink的dashboard上上傳點擊啟動。結(jié)果是不行,但是使用不同的插件打包還是可以的
    2022-05-05
  • Java實現(xiàn)簡單的五子棋小游戲

    Java實現(xiàn)簡單的五子棋小游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單的五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • SpringBoot中Elasticsearch的連接配置原理與使用詳解

    SpringBoot中Elasticsearch的連接配置原理與使用詳解

    Elasticsearch是一種開源的分布式搜索和數(shù)據(jù)分析引擎,它可用于全文搜索、結(jié)構(gòu)化搜索、分析等應用場景,本文主要介紹了SpringBoot中Elasticsearch的連接配置原理與使用詳解,感興趣的可以了解一下
    2023-09-09
  • Kotlin 基本語法實例詳解

    Kotlin 基本語法實例詳解

    這篇文章主要介紹了Kotlin 基本語法實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • JAVA SPI機制詳解使用方法

    JAVA SPI機制詳解使用方法

    Java定義了一套JDBC的接口,但并未提供具體實現(xiàn)類,而是在不同云廠商提供的數(shù)據(jù)庫實現(xiàn)包。這篇文章給大家介紹Java的SPI機制,感興趣的朋友一起看看吧
    2022-07-07
  • PowerJob的HashedWheelTimer工作流程源碼解讀

    PowerJob的HashedWheelTimer工作流程源碼解讀

    這篇文章主要為大家介紹了PowerJob的HashedWheelTimer工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01

最新評論

密云县| 苍山县| 彭泽县| 祁连县| 定南县| 汉川市| 海南省| 汝州市| 铜陵市| 杭锦旗| 岫岩| 和硕县| 洛川县| 西吉县| 香河县| 阜城县| 贞丰县| 巧家县| 雅江县| 永城市| 英吉沙县| 永寿县| 荣成市| 张家港市| 历史| 长泰县| 探索| 福安市| 呼图壁县| 奉化市| 陇西县| 汕尾市| 芜湖市| 房产| 奉贤区| 陆良县| 奇台县| 瑞金市| 五华县| 江永县| 日土县|