记录一次java生成条形码并调用打印机打印

news/2024/10/24 9:22:18/

生成条形码需要ja坐标:

        <!--生成条形码--><dependency><groupId>net.sf.barcode4j</groupId><artifactId>barcode4j-light</artifactId><version>2.0</version></dependency>

调用打印机java使用自身带有的print就可以做到

我们先生成条形码:generateFile方法传入需要条形码包含的信息和生成的路径就可以

package com.hongseng.app.config.barcode;import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;import java.awt.image.BufferedImage;
import java.io.*;/**** @program: fire* @description:* @author: fbl* @create: 2021-08-11 10:24**/
public class BarcodeUtil {/*** 生成文件s** @param msg* @param path* @return*/public static File generateFile(String msg, String path) {File file = new File(path);try {generate(msg, new FileOutputStream(file));} catch (FileNotFoundException e) {throw new RuntimeException(e);}return file;}/*** 生成字节** @param msg* @return*/public static byte[] generate(String msg) {ByteArrayOutputStream ous = new ByteArrayOutputStream();generate(msg, ous);return ous.toByteArray();}/*** 生成到流** @param msg* @param ous*/public static void generate(String msg, OutputStream ous) {if (msg == null || msg.equals("") || ous == null) {return;}Code39Bean bean = new Code39Bean();// 精细度final int dpi = 150;// module宽度final double moduleWidth = UnitConv.in2mm(1.0f / dpi);// 配置对象bean.setModuleWidth(moduleWidth);bean.setWideFactor(3);bean.doQuietZone(false);String format = "image/png";try {// 输出到流BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,BufferedImage.TYPE_BYTE_BINARY, false, 0);// 生成条形码bean.generateBarcode(canvas, msg);// 结束绘制canvas.finish();} catch (IOException e) {throw new RuntimeException(e);}}
}

在指定路径生产条形码之后,将路径作为参数调用接口打印

第一个参数是路径,其余四个参数是纸张和图片的尺寸

package com.hongseng.app.config.barcode;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.print.*;
import java.io.IOException;
import java.net.URL;import static java.awt.print.Printable.PAGE_EXISTS;/*** @program: fire* @description:* @author: fbl* @create: 2021-08-11 10:03**/
public  class PrintDemo {public static void qrCodePrint(String path, int pageWidth, int pageHeight, int showWidth, int showHeight) {// 通俗理解就是书、文档Book book = new Book();// 设置成竖打PageFormat pf = new PageFormat();pf.setOrientation(PageFormat.PORTRAIT);// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。Paper p = new Paper();//纸张大小p.setSize(pageWidth, pageHeight);p.setImageableArea(0, 0, pageWidth, pageHeight);pf.setPaper(p);// 把 PageFormat 和 Printable 添加到书中,组成一个页面book.append((graphics, pageFormat, pageIndex) -> {try {URL url = new URL(path);//也可以通过file构建一个本地图片File对象传递给ImageIO.read()方法Image image = ImageIO.read(url);//将图片绘制到graphics对象中(为什么把需要打印的内容drawImage就可以实现打印自己取看值传递一引用传递的区别)graphics.drawImage(image, 0, 0, showWidth, showHeight, null);} catch (IOException e) {e.printStackTrace();}return PAGE_EXISTS;//返回0(PAGE_EXISTS)则执行打印,返回1(NO_SUCH_PAGE)则不执行打印}, pf);// 获取打印服务对象PrinterJob job = PrinterJob.getPrinterJob();// 设置打印类job.setPageable(book);try {//可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印job.print();} catch (PrinterException e) {e.printStackTrace();}}
}

我的service层将两个工具类协同调用

package com.hongseng.app.service.barcode;import com.hongseng.app.config.barcode.BarcodeUtil;
import com.hongseng.app.config.barcode.PrintDemo;
import model.dto.barcode.BarCodeDto;
import model.dto.barcode.PicturePrintDto;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import result.Result;import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.UUID;/*** @program: fire_control* @description:* @author: fbl* @create: 2021-04-01 09:55**/
@Service
public class BarCodeService {@Value("${spring.servlet.multipart.location}")private String picturePath;@Value("${server.port}")private String port;public void prodCode(BarCodeDto barCodeDto) {String codeName = UUID.randomUUID().toString().replaceAll("-", "") + ".png";String path = picturePath + codeName;// 生成条形码图片BarcodeUtil.generateFile(barCodeDto.getId() + "", path);InetAddress localHost = null;try {localHost = Inet4Address.getLocalHost();} catch (UnknownHostException e) {e.printStackTrace();}String ip = localHost.getHostAddress();// 上传图片String finalPath =  "http://" + ip + ":" + port + "/file/" + codeName;// 打印图片// 打印PrintDemo.qrCodePrint(finalPath, barCodeDto.getPageWidth(), barCodeDto.getPageHeight(), barCodeDto.getShowWidth(), barCodeDto.getShowHeight());}}

BarCodeDto 类参数:

package model.dto.barcode;import lombok.Data;import javax.validation.constraints.NotNull;/*** @program: temperature-statistics* @description:* @author: fbl* @create: 2021-08-12 08:19**/
@Data
public class BarCodeDto {@NotNullprivate Integer id;@NotNullprivate Integer pageWidth;@NotNullprivate Integer pageHeight;@NotNullprivate Integer showWidth;@NotNullprivate Integer showHeight;
}

controller层调用就不写了


http://www.ppmy.cn/news/854758.html

相关文章

打印日志

ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.startActivity:1005 android.app.ContextImpl.startActivity:994 android.content.ContextWrapper.startActivity:403 应用的包名和类名:116 Android中的ContextImp…

服务器配置记录(二)打印机服务配置

参考 Ubuntu配置和使用cups打印服务器_按不出色风格的博客-CSDN博客_cups打印服务器 linux cups用户名密码,Linux下使用CUPS提供打印服务_掌阅读书的博客-CSDN博客 1. 服务器配置 1.1 安装cups Cups&#xff0c;即Common UNIX Printing System&#xff0c;这是Apple公司开发的…

电脑打印机怎么测试软件,如何快速检测打印机是否有问题?

从事软件实施与维护多年&#xff0c;对于软件方面常见的问题有很多。就拿最近比较经常遇见的打印机不打印的问题来说。打印机不打印的原因有很多&#xff0c;有可能软件没有调试好&#xff0c;但是更多可能出现在打印机本身身上。但是如何测试是打印机本身的问题还是软件中调试…

windows无法连接到打印机,操作失败,错误为0x0000011b,解决办法之一。

最近打印机连不上&#xff0c;查了下网上的资料&#xff0c;发现是Windows10的一个更新bug导致&#xff0c;但是按照网上的方法视乎重启后windows会强制更新&#xff0c;还是无法彻底解决问题。于是在继续查找到相关资料&#xff0c;现在将解决方法记录下来。 注意&#xff1a;…

打印机相关问题记录

打印机问题记录 windows10补丁影响打印机共享 HP打印机打印机显示 no print cartridge 共享打印机连接&#xff0c;错误0x0000011b windows10 补丁影响打印机共享 表现为客户端连不上共享打印机 处理办法为: 卸载服务端电脑如下补丁 补丁名称发布时间KB50067002021年10月KB500…

企业云性能监控是一项关键的任务

企业云性能监控是一项关键的任务&#xff0c;它不仅可以保障企业云服务的稳定性和可靠性&#xff0c;还可以加强企业对云服务的掌控和管理&#xff0c;提供卓越的用户体验。 首先&#xff0c;企业云性能监控可以保障云服务的稳定和可靠。在云计算环境下&#xff0c;企业的核心业…

Day43: 123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV

目录 123.买卖股票的最佳时机III 思路 188.买卖股票的最佳时机IV 思路 123.买卖股票的最佳时机III 123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 思路 1. 确定dp数组及其下标含义 一天一共就有五个状态&#xff0c; 没有操作 &#xff08…

Adobe Photoshop CC绿色版

下载地址&#xff1a; 链接: https://pan.baidu.com/s/1sge0P5C56JMz-W9pOgvWww 提取码: tgub