为了账号安全,请及时绑定邮箱和手机立即绑定

如何去除 zxing 生成的 QRCode 的边距?

如何去除 zxing 生成的 QRCode 的边距?

泛舟湖上清波郎朗 2022-05-21 17:09:57
我正在使用 com.google.zxing 版本 3.3.2 使用 jasper 报告生成 QRCode。生成的二维码有空格和边距。我怎样才能避免这些空间。我找到了添加 EncodeHintType.MARGIN, -1 的解决方案,但是如何在 jasper 报告中的图像表达式中添加它。下面是我现在使用的图像表达式。com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage(new com.google.zxing.qrcode.QRCodeWriter().encode(    $F{Code},com.google.zxing.BarcodeFormat.QR_CODE, 300, 300))
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

添加 EncodeHintType.MARGIN是正确的但是你需要输入0(否则会抛出错误)


要添加它,您可以使用QRCodeWriter的第二个构造函数


public BitMatrix encode(String contents,BarcodeFormat format,

                        int width,int height,Map<EncodeHintType,?> hints) 

                        throws WriterException 

这意味着您需要传递一个使用键和值初始化的 Map。创建和初始化地图的一种方法是使用Guava,它是ImmutableMap


com.google.common.collect.ImmutableMap.of(com.google.zxing.EncodeHintType.MARGIN,0)

因此,结果表达式将是


com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage(

    new com.google.zxing.qrcode.QRCodeWriter().encode(

    $F{Code},com.google.zxing.BarcodeFormat.QR_CODE, 300, 300,

    com.google.common.collect.ImmutableMap.of(com.google.zxing.EncodeHintType.MARGIN,0)))

示例(我放了一个边框来展示边距 0)

jrxml


<?xml version="1.0" encoding="UTF-8"?>

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="QRCode" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="ee443473-56d0-44df-b5d4-ac3fe82fd9bc">

    <queryString>

        <![CDATA[]]>

    </queryString>

    <title>

        <band height="200" splitType="Stretch">

            <image>

                <reportElement x="0" y="0" width="200" height="200" uuid="9236a226-c581-4d35-88d3-c65181090d03"/>

                <box>

                    <pen lineWidth="0.25"/>

                    <topPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>

                    <leftPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>

                    <bottomPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>

                    <rightPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>

                </box>

                <imageExpression><![CDATA[com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage(

new com.google.zxing.qrcode.QRCodeWriter().encode(

    "Hello world",com.google.zxing.BarcodeFormat.QR_CODE, 300, 300,com.google.common.collect.ImmutableMap.of(com.google.zxing.EncodeHintType.MARGIN,0)))]]></imageExpression>

            </image>

        </band>

    </title>

</jasperReport>

结果

//img1.sycdn.imooc.com//6288ac800001748704230282.jpg

查看完整回答
反对 回复 2022-05-21
  • 1 回答
  • 0 关注
  • 541 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号