Java生成二维码并打印二维码和文字信息

 

目录

1、生成二维码,并调用画布进行二维码和文字的描绘。

2、主程序:获取打印机,并打印内容

3、打印效果

参考文献:


    前期工作是安装好打印机驱动,可连接打印机。

    添加三个依赖jar:

具体见文底的参考文献。

1、生成二维码,并调用画布进行二维码和文字的描绘。

package print;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.util.HashMap;
import java.util.Map;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;/*** 此类,用于构建打印内容。* @author Administrator**/
public class LabelPrintable implements Printable {private String serNo = "643566786420230921054158";private String f1="45.5";private String f2="46.5";@Overridepublic int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {if (pageIndex > 0) {return NO_SUCH_PAGE;}Graphics2D g2d = (Graphics2D) graphics;g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());// 绘制二维码BufferedImage img = createImage(serNo);// 将二维码绘制到打印机g2d.drawImage(img, 0, 0, 35, 35, null);// 设置字体大小Font font = new Font("Arial", Font.PLAIN, 7);g2d.setFont(font);// 将文字绘制到打印机g2d.drawString(serNo.substring(0, serNo.length()-14), 40, 7);g2d.drawString(serNo.substring(serNo.length()-14), 40, 16);g2d.drawString("FMAX1:"+f1, 40, 25);g2d.drawString("FMAX5:"+f2, 40, 34);g2d.dispose();return PAGE_EXISTS;}/*** 生成二维码* @param serNo* @return*/private BufferedImage createImage(String serNo) {//图片宽度、高度,二维码和边框的边距//二维码的容错等级Map<EncodeHintType,Object> map = new HashMap<EncodeHintType,Object>();map.put(EncodeHintType.MAX_SIZE, 100);//设置编剧(二维码与图片编剧边框的距离)枚举map.put(EncodeHintType.MARGIN,2);//设置容错的等级 有四级  L(7%) M(15%) Q(25%)  H(30%)map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//设置字符集,避免中文乱码的情况map.put(EncodeHintType.CHARACTER_SET,"utf-8");//二维码的输出流 IO流MultiFormatWriter mfw = new MultiFormatWriter();try{//通过流创建一个二维矩阵643566786420230921054158BitMatrix bm = mfw.encode(serNo, BarcodeFormat.QR_CODE,400,400,map);//声明一张图片来回值二维码BufferedImage img = new BufferedImage(400,400,BufferedImage.TYPE_INT_BGR);//将二维码的矩阵回值到图片上//重复的做某件事就使用循环结构for (int i = 0; i < 400; i++) {for (int j = 0; j < 400; j++) {//声明一个颜色int rgb = 0;//画矩阵图rgb = bm.get(i,j) ? Color.BLACK.getRGB() : Color.WHITE.getRGB();//将内容绘制到图片中img.setRGB(i,j,rgb);}}//指定二维码的存储路径
//            ImageIO.write(img,"jpg",new File("D:/简书主页.jpg"));System.out.println("二维码生成完成");return img;
//        }catch(WriterException | IOException e){}catch(WriterException e){e.printStackTrace();}return null;}}

画布的核心代码是:

Graphics2D g2d = (Graphics2D) graphics;g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());// 绘制二维码BufferedImage img = createImage(serNo);// 将二维码绘制到打印机g2d.drawImage(img, 0, 0, 35, 35, null);// 设置字体大小Font font = new Font("Arial", Font.PLAIN, 7);g2d.setFont(font);// 将文字绘制到打印机g2d.drawString(serNo.substring(0, serNo.length()-14), 40, 7);g2d.drawString(serNo.substring(serNo.length()-14), 40, 16);g2d.drawString("FMAX1:"+f1, 40, 25);g2d.drawString("FMAX5:"+f2, 40, 34);g2d.dispose();
g2d.drawImage(img, 0, 0, 35, 35, null);

 以上是将二维码绘制到坐标0.0,图像宽度35、高度35

        // 将文字绘制到打印机g2d.drawString(serNo.substring(0, serNo.length()-14), 40, 7);g2d.drawString(serNo.substring(serNo.length()-14), 40, 16);g2d.drawString("FMAX1:"+f1, 40, 25);g2d.drawString("FMAX5:"+f2, 40, 34);

以上是将四行文字绘制到画布里x坐标40。

以上坐标根据具体情况和打印机进行调整。

2、主程序:获取打印机,并打印内容

package print;import java.awt.print.Printable;
import java.awt.print.PrinterJob;import javax.print.PrintService;
import javax.print.PrintServiceLookup;public class MainPrint {public static void main(String[] args) {try {// 连接到标签打印机PrintService printService = getLabelPrinter();// 创建打印任务PrinterJob printerJob = PrinterJob.getPrinterJob();printerJob.setPrintService(printService);// 设置打印内容Printable printable = new LabelPrintable();printerJob.setPrintable(printable);// 发送打印任务printerJob.print();} catch (Exception e) {e.printStackTrace();}}/*** 查找打印机* @return*/private static PrintService getLabelPrinter() {PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);for (PrintService printService : printServices) {System.out.println(printService.getName());// 查找标签打印机Label PPLBif (printService.getName().contains("Label")) {return printService;}}return null;}}

3、打印效果

参考文献:

1、

小项目教学——用Java生成二维码_程序员小橙的博客-CSDN博客

2、

java调用标签打印机_mob649e81630984的技术博客_51CTO博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/178171.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RHCE第二次作业

配置ssh远程连接 1.实现两台linux主机之间通过公钥验证能够互相实现免密登陆 1.1交互式 1&#xff09;客户端&#xff08;client&#xff09;生成非对称秘钥 [rootserver2 ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the ke…

postgresql 触发器如何生成递增序列号,从1开始,并且每天重置

大家好&#xff0c;我是三叔&#xff0c;许久不见&#xff0c;这期给大家介绍一下笔者在开发中遇到的业务处理&#xff1a;pgsql 创建触发器生成每日递增序列&#xff0c;并且第二天重置&#xff0c;根据不同的用户进行不同的控制。 1.创建生成递增序列的 table 表 -- 创建us…

Java-数组的定义与使用

本章重点&#xff1a; 1. 理解数组基本概念 2. 掌握数组的基本用法 3. 数组与方法互操作 4. 熟练掌握数组相关的常见问题和代码 1. 数组的基本概念 1.1 为什么要使用数组 public class TestStudent{public static void main(String[] args){int score1 70;int s…

看完就牛了,自动化测试框架详解

一、引言 随着IT技术的快速发展&#xff0c;软件开发变得越来越快速和复杂化。在这种背景下&#xff0c;传统的手工测试方式已经无法满足测试需求&#xff0c;而自动化测试随之而生。 自动化测试可以提高测试效率和测试质量&#xff0c;减少重复性的测试工作&#xff0c;从而…

TimeGPT-1——第一个时间序列数据领域的大模型他来了

一直有一个问题:时间序列的基础模型能像自然语言处理那样存在吗?一个预先训练了大量时间序列数据的大型模型&#xff0c;是否有可能在未见过的数据上产生准确的预测?最近刚刚发表的一篇论文&#xff0c;Azul Garza和Max Mergenthaler-Canseco提出的TimeGPT-1&#xff0c;将ll…

chatgpt生成文本的底层工作原理是什么?

文章目录 &#x1f31f; ChatGPT生成文本的底层工作原理&#x1f34a; 一、数据预处理&#x1f34a; 二、模型结构&#x1f34a; 三、模型训练&#x1f34a; 四、文本生成&#x1f34a; 总结 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN…

厦门万宾科技智能井盖监测仪器的作用如何?

越来越多的人们希望改善生活&#xff0c;走出农村走出大山&#xff0c;前往城市之中居住。由此城市的人口和车辆在不断增加&#xff0c;与之而来的是城市的交通压力越来越大&#xff0c;时常会出现道路安全隐患&#xff0c;这给城市未来发展和智慧城市建设都带来一定的难题&…

数字化浪潮下,AI数字人融入多元化应用场景

随着AI数字人技术的发展&#xff0c;各个行业都在不断挖掘数字人更多的潜力&#xff0c;VR全景中的AI数字人功能逐渐成为了一种新颖的用户交互方式。AI数字人将企业的文化、品牌价值、商业服务等充分结合为一体&#xff0c;为企业提供了全新的机会&#xff0c;从客户互动到营销…

服务器遭受攻击如何处理(记录排查)

本文的重点是介绍如何鉴别安全事件以及保护现场的方法&#xff0c;以确保服务器负责人能够在第一时间对安全攻击做出反应&#xff0c;并在最短时间内抵御攻击或减少攻击所带来的影响。 在服务器遭遇疑似安全事件时&#xff0c;通常可以从账号、进程、网络和日志四个主要方面进…

VBA技术资料MF78:产生随机字符串密码

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

致远OA wpsAssistServlet接口存在任意文件上传漏洞

致远OA wpsAssistServlet接口存在任意文件上传漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: app"致远互联-OA" && title"V8.0SP2" 漏洞复现1. 构造poc2. 发送数据包3. 访问webshell地址 免责声明 仅用于技术交流,目的是向相关安全人员展示…

前端基础之BOM和DOM

目录 一、前戏 window对象 window的子对象 navigator对象&#xff08;了解即可&#xff09; screen对象&#xff08;了解即可&#xff09; history对象&#xff08;了解即可&#xff09; location对象 弹出框 计时相关 二、DOM HTML DOM 树 查找标签 直接查找 间…

Open3D 点云旋转的轴角表示法和罗德里格斯公式应用(python详细过程版)

目录 一、算法原理1、轴角表示法2、罗德里格斯公式二、代码实现1、 根据向量计算旋转矩阵2、 使用罗德里格斯公式旋转两个法向量之间的一组点3、 点云变换三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、…

【腾讯云HAI域探秘】0基础也能开发应用

【腾讯云HAI域探秘】0基础也能开发应用 文章目录 【腾讯云HAI域探秘】0基础也能开发应用前言腾讯云高性能应用服务&#xff08;HAI&#xff09;的简介环境搭建启动 高性能应用服务HAI 配置的 ChatGLM2-6B WebUI 进行简单的对话总结 前言 在当今数字化时代&#xff0c;人工智能…

华山编程培训中心——工业相机飞拍

飞拍功能是一种高速运动图像采集技术&#xff0c;通过降低相机的曝光时间来拍摄快速移动的对象&#xff0c;以提高工作效率和加快生产速度。下面视频演示工业相机飞拍&#xff1a; 上位机控制工业相机飞拍演示 一. 飞拍对相机硬件的要求 全局快门相机&#xff1a;飞拍要求相机…

【Gensim概念】03/3 NLP玩转 word2vec

第三部分 对象函数 八 word2vec对象函数 该对象本质上包含单词和嵌入之间的映射。训练后&#xff0c;可以直接使用它以各种方式查询这些嵌入。有关示例&#xff0c;请参阅模块级别文档字符串。 类型 KeyedVectors 1&#xff09; add_lifecycle_event(event_name, log_level2…

【SpringMVC篇】讲解RESTful相关知识

&#x1f38a;专栏【SpringMVC】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f384;REST简介&#x1f33a;RESTful入门案例⭐案例一⭐…

项目上线前发现严重Bug怎么办?

今天分享一个面试问题&#xff0c;现在有一个面试场景&#xff1a; 项目计划明天发布&#xff0c;但是在今天你作为测试人员发现了一个严重的bug&#xff0c;市场相关人员又在催发布的事情&#xff0c;这个时候你应该怎么办&#xff1f; 这是测试工程师不管是在面试&#xff0…

Vue 事件绑定 和 修饰符

目录 一、事件绑定 1.简介 : 2.实例 : 二、修饰符 1.简介 : 2.实例 : 3.扩展 : 一、事件绑定 1.简介 : (1) 在Vue中&#xff0c;通过"v-on:事件名"可以绑定事件&#xff0c;eg : v-on:click表示绑定点击事件。 (2) 触发事件时调用的方法&#xff0c;定义在Vu…

RT-Thread系统使用常见问题处理记录

1.使用telnet连接系统时发送help指令显示不全的问题。 原因&#xff1a;telnet发送缓存太小。 解决办法&#xff1a;更改agile_telnet软件包里Set agile_telnet tx buffer size的大小。 2.使用Paho MQTT软件包过一段时间报错hard fault on thread: mqtt0 解决办法&#xff1…