HTML5 SVG 怎么实现条形码和二维码的矢量生成

风浩小哥_5490

风浩小哥_5490

2026-09-15

906人浏览

原创

html5和svg本身不能生成可扫码的条形码/二维码,必须依赖符合国际标准的编码库;jsbarcode适用于一维码(如ean-13),qrcode.js适用于二维码,均支持svg输出;纯手写svg/css无法满足校验位、静区、容错等扫码必需条件。

html5 svg 怎么实现条形码和二维码的矢量生成

HTML5 本身不提供条形码或二维码的生成能力,SVG 是一种矢量图形容器,它能清晰呈现图形,但“画出可扫码的条形码/二维码”必须依赖符合国际标准(如 ISO/IEC 16022、ISO/IEC 18004)的编码逻辑。纯手写 SVG 路径或 CSS 拼接出来的“条形码”无法被扫码设备识别——因为缺少校验位、模块宽度比例、静区(quiet zone)、容错结构等关键要素。

用 JsBarcode 在 SVG 中生成合规条形码

JsBarcode 是目前最成熟、轻量、专为一维码设计的前端库,支持 EAN-13、CODE128、ITF-14 等主流格式,并原生输出 SVG 元素(非图片),保证无损缩放和打印精度。

  • 引入库:<script src="https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js"></script>(注意:v4+ 已放弃 IE 支持,生产环境建议锁定 v3.11.5)
  • HTML 结构需含一个空容器,例如:<svg id="my-barcode"></svg>
  • JS 调用前确保 DOM 就绪,且容器有明确宽高(SVG 默认宽高为 0,不设则不可见):
    JsBarcode("#my-barcode", "0123456789012", {<br>
        format: "EAN13",<br>
        width: 2,<br>
        height: 80,<br>
        displayValue: true<br>
      });
  • 关键细节:data-value 属性非必需,但若使用,值必须合法;传入字符串长度须匹配格式要求(如 EAN-13 必须是 13 位数字,不足自动补零或报错)

用 QRCode.js 或 qrcode-generator 生成 SVG 格式二维码

二维码与条形码不同,其生成逻辑更复杂(含数据编码、掩码、纠错等级、定位图案等)。qrcode-generator 和 QRCode.js 均支持直接输出 SVG 字符串或 DOM 元素,避免 canvas 抗锯齿导致的扫码失败问题。

Markdown to HTML
Markdown to HTML

{"answer":"将 Markdown 转换为内嵌 CSS、样式精美的独立 HTML。完美适用于新闻简报、文档、报告及邮件模板。"}

下载
  • 推荐 QRCode.js(更轻、ESM 友好):<script src="https://cdn.jsdelivr.net/npm/qrcode@1.5.3/build/qrcode.min.js"></script>
  • 生成 SVG 并插入页面:
    QRCode.toSVG("https://example.com", {<br>
        width: 256,<br>
        height: 256,<br>
        errorCorrectionLevel: 'M'<br>
      }).then(svg => {<br>
        document.getElementById("qrcode").innerHTML = svg;<br>
      });
  • 务必设置足够留白(quiet zone):SVG 外容器应加 margin ≥ 20px;内部二维码自身需保留至少 4 模块宽度的空白边,否则微信扫一扫等引擎会拒绝识别
  • URL 类内容必须 encodeURIComponent 编码,尤其含中文、#、? 时,否则生成结果可能截断或解析错误

为什么不能用纯 SVG/CSS 手动画?

扫码设备(超市枪、微信、支付宝)只认经过严格校验的栅格化图像或 SVG 路径,其底层依赖的是模块宽度比、起始/终止符、校验算法等。手动拼矩形:

  • 无法动态计算校验位(如 EAN-13 的第 13 位),扫出来一定是错码
  • 缩放后线条像素化或间隙失真,破坏模块边界定义
  • 缺少静区(quiet zone),多数扫码器在检测到边缘前就放弃识别
  • 不支持纠错机制(二维码的 L/M/Q/H 四级容错),轻微污损即失效

服务端生成更适合哪些场景?

当需要统一管理规则、规避 JS 禁用、提升首屏性能或对接 ERP/打印系统时,服务端生成更稳妥:

  • Python 后端可用 python-barcode + qrcode 库,返回 SVG 或 PNG,前端仅用 <img src="/api/barcode?text=xxx&type=code128">
  • Node.js 可用 bwip-js,支持 90+ 条码格式,API 返回 SVG 字符串,前端 innerHTML 插入即可
  • 优势:缓存友好(CDN 可缓存 /api/barcode?xxx)、兼容性 100%、便于审计和日志追踪

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2003

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4263

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5390

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

4838

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

683

5

html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

4795

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

2812

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

2470

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

2499

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 10.5万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 18.1万人学习

前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 6.2万人学习