Our great sponsors
-
SurveyJS
Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
Generating QR codes on the web is easy. There are lots of libraries out there who help us do it. One of them is qrcode.react which we will be using for the purpose of this tutorial.
, etc. for styling. So we need to parse our DOM as canvas and then convert it into a png. There's a libary which helps us do just that. html2canvas. We modify our downloadQRCode function such that first we get snapshot of our DOM as a canvas then we convert that into a png. Final code // QRCodeTemplate.tsx import React from "react" import html2canvas from "html2canvas" import { QRCodeCanvas } from "qrcode.react" import Button from "components/Button" import QRCodeTemplate from "components/dashboard/QRCodeTemplate" const QRCodeDownload = () => { const url = "https://anshsaini.com" const getCanvas = () => { const qr = document.getElementById("fancy-qr-code") if (!qr) return return html2canvas(qr, { onclone: snapshot => { const qrElement = snapshot.getElementById("fancy-qr-code") if (!qrElement) return // Make element visible for cloning qrElement.style.display = "block" }, }) } const downloadQRCode = async () => { const canvas = await getCanvas() if (!canvas) throw new Error(" not found in DOM") const pngUrl = canvas .toDataURL("image/png") .replace("image/png", "image/octet-stream") const downloadLink = document.createElement("a") downloadLink.href = pngUrl downloadLink.download = "QR code.png" document.body.appendChild(downloadLink) downloadLink.click() document.body.removeChild(downloadLink) } return (
QRCodeTemplate>Download QR CodeButton> div> div> ) } export default QRCodeDownload Enter fullscreen mode Exit fullscreen mode The Result We have a beautiful QR code saved as a png. And with the power of React, we can create as many styles as we want.