日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java连接打印机打印二维码

發(fā)布時間:2024/1/8 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java连接打印机打印二维码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先導入依賴

implementation 'com.google.zxing:core:3.5.1' implementation 'com.google.zxing:javase:3.5.1'

?1、創(chuàng)建 生成二維碼和打印機的工具類

package com.tld.util;import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;import javax.imageio.ImageIO; import javax.print.*; import javax.print.attribute.DocAttributeSet; import javax.print.attribute.HashDocAttributeSet; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.MediaSizeName; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.print.PrinterJob; import java.io.*; import java.util.Hashtable;/*** 二維碼圖片打印機工具類*/ public class MyQRUtils {private static final Log logger = LogFactory.getLog(MyQRUtils.class);private static final int BLACK = 0xFF000000;private static final int WHITE = 0xFFFFFFFF;private static final int LogoPart = 4;/*** 生成二維碼前的配置信息* @param content 生成二維碼圖片內(nèi)容* @param width 二維碼圖片的寬度* @param height 二維碼圖片的高度* @return*/public static BitMatrix setBitMatrix(String content, int width, int height){Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //指定糾錯等級BitMatrix bitMatrix=null;try {//生成二維碼bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);} catch (WriterException e) {logger.error("生成二維碼錯誤",e);}return bitMatrix;}/*** 將LOGO圖片放在二維碼中間(水印效果)* 將生成的圖片以流的形式輸出到頁面展示* @param matrix BitMatrix* @param format 圖片格式* @param outStream 輸出流* @param logoPath LOGO地址* @param showBottomText 二維碼圖片底部需要顯示的問題* @throws IOException*/public static void megerToFile(BitMatrix matrix,String format,OutputStream outStream,String logoPath,String showBottomText) throws IOException {BufferedImage image = toBufferedImage(matrix);Graphics2D gs = image.createGraphics();//1.加入LOGO水印效果if(null != logoPath && !"".equals(logoPath)){//1.1 載入LOGO圖片BufferedImage logoImg = ImageIO.read(new File(logoPath));//1.2 考慮到LOGO圖片貼到二維碼中,建議大小不要超過二維碼的1/5;int width = image.getWidth() / LogoPart;int height = image.getHeight() / LogoPart;//1.3 LOGO居中顯示int x = (image.getWidth() - width) / 2;int y = (image.getHeight() - height) / 2;gs.drawImage(logoImg, x, y, logoImg.getWidth(), logoImg.getHeight(), null);logoImg.flush();}//2.二維碼圖片底部插入文字if(null != showBottomText && !"".equals(showBottomText)){//2.1 設置字體樣式Font font = new Font("微軟雅黑", Font.PLAIN, 14);gs.setColor(Color.BLACK);gs.setFont(font);//2.2 字體顯示位置int x = (image.getWidth() - getWatermarkLength(showBottomText, gs))/2;int y = image.getHeight()-2;gs.drawString(showBottomText, x, y);}gs.dispose();ImageIO.write(image, format, outStream);}/*** 將LOGO圖片放在二維碼中間(水印效果)* 將生成的圖片生成到本地硬盤路徑下* @param matrix BitMatrix* @param format 圖片格式* @param imagePath 圖片存放路徑* @param logoPath LOGO地址* @param showBottomText 二維碼圖片底部需要顯示的問題* @throws IOException*/public static void megerToFile2(BitMatrix matrix,String format,String imagePath,String logoPath,String showBottomText) throws IOException {BufferedImage image = toBufferedImage(matrix);Graphics2D gs = image.createGraphics();//1.加入LOGO水印效果if(null != logoPath && !"".equals(logoPath)){BufferedImage logoImg = ImageIO.read(new File(logoPath));int width = image.getWidth() / LogoPart;int height = image.getHeight() / LogoPart;int x = (image.getWidth() - width) / 2;int y = (image.getHeight() - height) / 2;gs.drawImage(logoImg, x, y, logoImg.getWidth(), logoImg.getHeight(), null);logoImg.flush();}//2.二維碼圖片底部插入文字if(null != showBottomText && !"".equals(showBottomText)){//2.1 設置字體樣式Font font = new Font("微軟雅黑", Font.PLAIN, 14);gs.setColor(Color.BLACK);gs.setFont(font);//2.2 字體顯示位置int x = (image.getWidth() - getWatermarkLength(showBottomText, gs))/2;int y = image.getHeight()-2;gs.drawString(showBottomText, x, y);}gs.dispose();ImageIO.write(image, format, new File(imagePath));}/*** 獲取水印字體的長度* @param fontString* @param gs* @return*/public static int getWatermarkLength(String fontString,Graphics2D gs){return gs.getFontMetrics(gs.getFont()).charsWidth(fontString.toCharArray(),0,fontString.length());}public static BufferedImage toBufferedImage(BitMatrix matrix){int width = matrix.getWidth();int height = matrix.getHeight();BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);for(int x=0;x<width;x++){for(int y=0;y<height;y++){image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);}}return image;}/*** 打印保存的圖片/二維碼* @param file* @return*/public static void getPrint(File file ){try {PrintService printService = PrintServiceLookup.lookupDefaultPrintService();if (file != null) {//創(chuàng)建打印任務DocPrintJob jon = printService.createPrintJob();// 設置紙張大小,也可以新建MediaSize類來自定義大小// 文件類型圖片格式DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();pras.add(MediaSizeName.ISO_A4);DocAttributeSet das = new HashDocAttributeSet();InputStream input = new FileInputStream(file);//得到要打印屬性的文件類型Doc doc = new SimpleDoc(input, flavor, das);//獲取所有打印機javax.print.PrintService[] printServices = PrinterJob.lookupPrintServices();for (int i = 0; i < printServices.length; i++) {String sps = printServices[i].toString();System.out.println("打印機名稱"+sps);}//打印jon.print(doc, pras);}} catch (PrintException | FileNotFoundException e) {e.printStackTrace();}}}

2、創(chuàng)建實體類

package com.tld.controller;import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.tld.util.MyQRUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Path; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/*** 打印二維碼*/ @RestController @RequestMapping("/Printer") public class WebPrintController {private static final Log logger = LogFactory.getLog(MyQRUtils.class);/*** 二維碼預覽頁面* @param model* @return*/@PostMapping("/showList.do")public String showQRList(Model model){//模擬獲取數(shù)據(jù)庫數(shù)據(jù)List listData = new ArrayList();StringBuffer ids = new StringBuffer();String code = "print00";for (int i = 0; i < 3; i++) {Map<String,String> map = new HashMap<String,String>(); //模擬VOmap.put("id",code+""+i);ids.append(code+""+i).append(",");listData.add(map);}model.addAttribute("showListData", listData);model.addAttribute("ids", ids);return "showQR";}/*** 二維碼打印頁面* 隱藏在iframe中* @param model* @return*/@PostMapping("/printEWM.do")public String printQRFrame(Model model, HttpServletRequest request){String ids = request.getParameter("ids");model.addAttribute("ids", ids);return "printFrameQR";}/*** 顯示二維碼圖片* @param request* @param response* @throws Exception*/@PostMapping("/showEWMImage.do")public void showImageByType(HttpServletRequest request, HttpServletResponse response){String id = request.getParameter("showID"); //ID//此處可從數(shù)據(jù)庫中獲取內(nèi)容String content ="打印二維碼\n打印測試\nID:"+id;//content 二維碼中的信息OutputStream outStream = null;try {outStream = response.getOutputStream();String format = "jpg";String type = "png" ;String bottomText = "一路不停"; //水印文字//生成二維碼前的配置信息BitMatrix bitMatrix = MyQRUtils.setBitMatrix(content, 180 , 180);//暫時不使用LOGO圖片//以流的形式展示MyQRUtils.megerToFile(bitMatrix, format, outStream, null,bottomText);//定義路徑,用絕對路徑Path file = new File("D:\\workspace/code.png").toPath();System.out.println("---路徑---"+file.toFile());//生成路徑并且保存文件MatrixToImageWriter.writeToPath(bitMatrix,type,file);//開始打印MyQRUtils.getPrint(file.toFile());} catch (Exception e) {logger.error("二維碼生成失敗", e);}finally{try {if(outStream!=null){outStream.flush();outStream.close();}} catch (IOException e) {logger.error("關閉數(shù)據(jù)流失敗", e);}}}}

?

?

總結

以上是生活随笔為你收集整理的Java连接打印机打印二维码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产欧美日韩三区 | 国内精品久久久久久久久 | 午夜一级在线 | 自偷自拍av| 欧美成人一区二区在线 | 久久久久久久香蕉 | 在线观看视频色 | 成人在线亚洲 | 自拍一级片 | 一级黄色片免费观看 | 久久一道本| 成人免费看片又大又黄 | 久久综合伊人77777蜜臀 | 色屁屁www影院免费观看入口 | 男人天堂成人 | 看黄网站在线观看 | 碧蓝之海动漫在线观看免费高清 | 中文字幕第22页 | 国产欧美日韩二区 | 天堂8中文在线 | 日韩美女一区二区三区 | 国产69精品久久久久久 | 国产精品27p | 夜晚福利视频 | 日本一级黄色大片 | 欧美十大老熟艳星 | 欧美色图1 | 成人试看120秒体验区 | 孕妇爱爱视频 | 亚洲熟区 | 原创露脸88av | 欧美精品99久久久 | 一级做a爱视频 | 女人又爽又黄免费女仆 | 亚洲国产福利 | 国产精品久久久久久亚洲调教 | 久久成人免费电影 | av一级免费 | 精品国产丝袜一区二区三区乱码 | 91亚洲视频在线 | 亚洲男同视频 | 成年人在线免费观看视频网站 | 久久精品国产久精国产 | av看片在线 | 调教丰满的已婚少妇在线观看 | 性生交大片免费看狂欲 | 国产精品毛片视频 | 91亚洲一区二区三区 | 久久大尺度 | 天天干天天爽天天操 | 调教奶奴 | 亚洲国产精品成人 | 亚洲性事| 成年人免费看视频 | 国产精品免费视频一区二区三区 | 欧美日韩成人在线观看 | 日韩国产在线一区 | 99一区二区 | 国产日韩成人 | 精品人妻一区二区免费 | 国产夫妻在线视频 | 免费黄色av片 | 毛片网站免费观看 | 成在线人免费视频 | 337p亚洲精品色噜噜狠狠 | 国产网红无码精品视频 | 亚洲成人av在线播放 | 经典三级久久 | 亚洲av无码乱码在线观看性色 | 少妇2做爰交换朴银狐 | 国产伦精品一区二区三区照片 | 91久久久久久 | 91精品在线视频观看 | 成年人免费网站 | 人妻少妇被猛烈进入中文字幕 | 伊人网在线视频 | 亚洲毛片大全 | 不卡日韩 | 欧美成人久久 | av鲁丝一区鲁丝二区鲁丝 | 亚洲影视在线 | 中文字幕 人妻熟女 | 福利视频不卡 | 色先锋av资源 | 青青草国产在线 | 中国国产精品 | 午夜亚洲精品 | 伊人黄色 | 性做爰裸体按摩视频 | 二级毛片视频 | 九色视频91 | 久久午夜精品 | 四虎4hu永久免费网站影院 | 色久网| 无码国产色欲xxxxx视频 | 天天看av | 免费中文字幕日韩欧美 | 丰满人妻妇伦又伦精品国产 | 成人依依网|