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("打印导出二维码异常");
        }
    }
}


相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
70 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
3月前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
13天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
26 4
|
1月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
44 3
|
1月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
52 4
|
1月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
60 2
|
1月前
|
Java 数据安全/隐私保护 C++
Java语言关键字
Java语言关键字
24 2
|
1月前
|
算法 小程序 Java
java制作海报三:获取微信二维码详情,并改变大小,合成到海报(另一张图片)上
这篇文章介绍了如何使用Java获取微信小程序的二维码,并将其调整大小后合成到海报(另一张图片)上。
41 0
|
1月前
|
分布式计算 安全 Java
Java语言的特点?
Java语言的特点?
|
1月前
|
小程序 前端开发 Java
java 生成小程序二维码
java 生成小程序二维码
16 0
下一篇
无影云桌面