java语言批量生成二维码

简介: java语言批量生成二维码

背景:

在智物项目中,为了物品入库、借用、归还方便,减少用户的操作,使用扫描二维码的方式进行操作,那么如何java 后端生成二维码传入到前端就成了一个问题

业务分析:

1.寻找一个二维码的pfd文件类型

2.将二维码信息存入pdf文件中

3.将pdf文件如何传入前端

E-JCEBLUE官网

https://www.e-iceblue.cn/pdf_java_barcode/add-qrcode-in-pdf-using-java.html

实践操作:

1 Java 添加二维码到 PDF 文档 (e-iceblue.cn)

准备工作:

本项目的pom文件中添加两个依赖

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.office.free</artifactId>
    <version>3.1.1</version>
</dependency>
<repository>
    <id>com.e-iceblue</id>
    <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>

需要在maven的setting文件中添加:

<mirror>
    <id>com.e-iceblue</id>
    <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
      <mirrorOf>com.e-iceblue</mirrorOf>
      <name>com.e-iceblue</name>
  </mirror>

业务实践:

controller层:

@ApiOperation(value=“后端生成所有未打印二维码信息”)

@GetMapping("/download")
public FrontResult findAllUnexportedQrCode( String isExportQRCode, HttpServletResponse response){
     itemQRCodeService.findAllUnexportedQrCode( isExportQRCode);
    //如果拿到的数据不为空
    response.reset();
    response.setContentType("application/pdf");
    response.setHeader("Content-disposition",
            "attachment;filename=qrcode-" + System.currentTimeMillis() + ".pdf");
    File file = new File("ias-provider-itemqrcode/src/main/resources/qrcode.pdf"); // 改这里
    try (FileInputStream inputStream = new FileInputStream(file);) { // try-with-resources
        byte[] b = new byte[CommonConstants.ONEBYTE];
        int len;
        while ((len = inputStream.read(b)) > CommonConstants.ZERO_INT) {
            response.getOutputStream().write(b, CommonConstants.ZERO_INT, len);
        };
    } catch (IOException e) {
e.printStackTrace();
    }
    return super.failure();
}

service层:

void findAllUnexportedQrCode(String isExportQRCode);

将二维码信息生成pdf文件

public class GenerateCode {
   public List<PdfImage>  getPdfList(List<QrcodePojo> qrCodeModelList){
       List<PdfImage> pdfImages =new ArrayList<>();
       for (QrcodePojo qrcodePojo: qrCodeModelList ) {
           BarcodeSettings settings = new BarcodeSettings();
           settings.setType(BarCodeType.QR_Code);
           settings.setData(qrcodePojo.getItemId());
           settings.setData2D(qrcodePojo.getItemName());
           settings.setX(CommonConstants.QRCODELengh);
           settings.setLeftMargin(CommonConstants.ZERO_INT);
           settings.setShowTextOnBottom(true);
           settings.setQRCodeECL(QRCodeECL.Q);
           settings.setQRCodeDataMode(QRCodeDataMode.Numeric);
           BarCodeGenerator generator = new BarCodeGenerator(settings);
           Image image = generator.generateImage();
           PdfImage pdfImage =PdfImage.fromImage((BufferedImage)image);
           pdfImages.add(pdfImage);
       }
         return pdfImages;
   }
/**
     * @Author:RenYaBing
     * @Description:查询所有未导出二维码
     * @CreateTime: 2023/1/30 21:13
     * @param: [isExportQRCode
     * @return: java.util.List<com.tfjybj.itemqrcode.entity.ItemQRCodeEntity>
     **/
    @Override
    public void findAllUnexportedQrCode(String isExportQRCode )  {
        try {
            //查出二维码集合列表
            List<QrcodePojo> itemQRCodeEntityList =itemQRCodeMapper.findQRCode(isExportQRCode);
            //判断查出来的数据是否为空
            if(itemQRCodeEntityList!=CommonConstants.Null_Object) {
                //按照一页40条数据首先获取生成pdf的页
              int pages=   itemQRCodeEntityList.size()/CommonConstants.FORTY+CommonConstants.ONE_INT;
              //获取总页数
                GenerateCode generateCode = new GenerateCode();
                List<PdfImage> pdfImages = generateCode.getPdfList(itemQRCodeEntityList);
                int startpage=CommonConstants.ZERO_INT;
                int i=CommonConstants.ZERO_INT;
                int j=CommonConstants.ZERO_INT;
                int count=CommonConstants.ZERO_INT;
                PdfDocument pdf = new PdfDocument();
                    while (startpage<pages&&count%CommonConstants.FORTY==CommonConstants.ZERO_INT){
                        PdfPageBase page = pdf.getPages().add();
                        while (j<CommonConstants.EIGHTHUNDRED){
                            while (i<=CommonConstants.FOUR_HUNDRED_AND_FROUR&&count<pdfImages.size()){
                                page.getCanvas().drawImage(pdfImages.get(count), i, j);
                                i+=CommonConstants.HUNDRED_INT;
                                count++;
                            }
                            j+=CommonConstants.HUNDRED_INT;
                            i=CommonConstants.ZERO_INT;
                        }
                        j=CommonConstants.ZERO_INT;
                        i=CommonConstants.ZERO_INT;
                        startpage++;
                    }
                pdf.saveToFile("ias-provider-itemqrcode/src/main/resources/qrcode.pdf");
                pdf.dispose();
            }
        }catch (Exception e){
            log.error("打印导出二维码异常");
        }
    }
}


相关文章
|
2月前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
3月前
|
Oracle 安全 Java
Java语言简介及发展
Java语言简介及发展
|
3月前
|
算法 Java
Java语言实现最短路径算法(Shortest Path)
Java语言实现最短路径算法(Shortest Path)
45 3
|
2月前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
|
3月前
|
算法 Java 编译器
透视Java语言的究极优化:探索性能的深度
在Java程序员的日常工作中,优化代码性能是一项至关重要的任务。然而,除了传统的性能调优方法外,本文将探讨一些更为深奥的技术,如JIT编译器的内部工作机制、GC算法的进阶应用以及多线程并发模型的优化策略。通过深入了解这些技术背后的原理和实现,我们可以更好地理解如何在Java平台上实现最高效的代码运行。 【7月更文挑战第11天】
67 4
|
4月前
|
算法 Java
垃圾回收机制(Garbage Collection,GC)是Java语言的一个重要特性,它自动管理程序运行过程中不再使用的内存空间。
【6月更文挑战第24天】Java的GC自动回收不再使用的内存,关注堆中的对象。通过标记-清除、复制、压缩和分代等算法识别无用对象。GC分为Minor、Major和Full类型,针对年轻代、老年代或整个堆进行回收。性能优化涉及算法选择和参数调整。
54 3
|
3月前
|
Java 大数据 API
Java语言的核心知识点与特性
Java 是一种广泛使用的编程语言,自 1995 年发布以来,它已经成为了企业级应用开发、移动应用开发、大数据处理和云计算等领域的主流技术。
40 0
|
3月前
|
设计模式 算法 Oracle
Java语言学习路径及学习资源推荐
Java语言学习路径及学习资源推荐
|
3月前
|
JavaScript 前端开发 Java
Java语言+前后端分离 数字化产科管理平台 产科电子病历系统源码
Java开发的数字化产科管理系统,已在多家医院实施,支持直接部署。系统涵盖孕产全程,包括门诊、住院、统计和移动服务,整合高危管理、智能提醒、档案追踪等功能,与HIS等系统对接。采用前后端分离架构,Java语言,Vue前端,MySQL数据库。优势在于提升就诊效率,降低漏检率,自动报表生成,减少重复工作,支持数据研究,并实现医院与卫计委平台的数据互通,打造全生育周期健康服务。
49 0
|
4月前
|
Java 大数据 API
下一篇
无影云桌面