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";

	@Override
	public 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{
            //通过流创建一个二维矩阵643566786420230921054158
            BitMatrix 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 PPLB
			if (printService.getName().contains("Label")) {
				return printService;
			}
		}
		return null;
	}
	

}

3、打印效果

参考文献:

1、

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

2、

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java生成二维码并下载的代码示例: ```java // 导入相关包 import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; @Controller @RequestMapping("/qrcode") public class QRCodeController { @GetMapping("/download") @ResponseBody public void downloadQRCode(@RequestParam("content") String content, HttpServletResponse response) throws IOException, WriterException { // 设置二维码参数 int width = 300; // 二维码宽度 int height = 300; // 二维码高度 String format = "png"; // 二维码图片格式 Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 编码格式 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 容错等级 hints.put(EncodeHintType.MARGIN, 1); // 边距 // 生成二维码 BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix); // 将二维码图片写入文件 File file = new File("qrcode.png"); ImageIO.write(image, format, file); // 设置响应头,使浏览器能够下载文件 response.setHeader("Content-Disposition", "attachment;filename=qrcode.png"); response.setContentType("application/octet-stream"); response.setContentLength((int) file.length()); // 将文件写入响应流 FileInputStream in = new FileInputStream(file); OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } in.close(); out.close(); } } ``` 以上代码使用Spring Boot框架,通过调用`/qrcode/download`接口,传入二维码内容`content`,即可生成二维码并下载到本地。其中,二维码参数可以根据需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值