const PDFJS = require('pdfjs-dist') PDFJS.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${PDFJS.version}/pdf.worker.js` import jsQR from "jsqr" import {saveAs} from 'file-saver' import {decodeData} from "../src/decode" import {createPass} from "../src/pass" import Card from "../components/Card" import Alert from "../components/Alert" export default Form function Form() { function readFileAsync(file) { return new Promise((resolve, reject) => { let reader = new FileReader(); reader.onload = () => { resolve(reader.result); }; reader.onerror = reject; reader.readAsArrayBuffer(file); }) } const error = function(heading, message) { const alert = document.getElementById('alert') alert.setAttribute('style', null) document.getElementById('heading').innerHTML = heading document.getElementById('message').innerHTML = message document.getElementById('spin').style.display = 'none' } const processPdf = async function() { document.getElementById('spin').style.display = 'block' const file = document.getElementById('pdf').files[0] const result = await readFileAsync(file) let typedArray = new Uint8Array(result) const canvas = document.getElementById('canvas') const ctx = canvas.getContext('2d') let loadingTask = PDFJS.getDocument(typedArray) await loadingTask.promise.then(async function (pdfDocument) { const pdfPage = await pdfDocument.getPage(1) const viewport = pdfPage.getViewport({ scale: 1 }) canvas.width = viewport.width canvas.height = viewport.height const renderTask = pdfPage.render({ canvasContext: ctx, viewport, }) return await renderTask.promise }) let imageData = ctx.getImageData(0, 0, canvas.width, canvas.height) let code = jsQR(imageData.data, imageData.width, imageData.height, { inversionAttempts: 'dontInvert', }) if (code) { const rawData = code.data let decoded try { decoded = decodeData(rawData) } catch (error) { error('Invalid QR code found', 'Make sure that you picked the correct PDF') } return {decoded: decoded, raw: rawData} } else { error('No QR code found', 'Try scanning the PDF again') } } const addToWallet = async function(event) { event.preventDefault() let result try { result = await processPdf() } catch { error('Error:', 'Could not extract QR code data from PDF') } if (typeof result === 'undefined') { return } const color = document.getElementById('color').value try { const pass = await createPass( { decoded: result.decoded, raw: result.raw, color: color } ) if (!pass) { error('Error:', "Something went wrong.") } else { const passBlob = new Blob([pass], {type: "application/vnd.apple.pkpass"}); saveAs(passBlob, 'covid.pkpass') } } catch (e) { error('Error:', e.message) } finally { document.getElementById('spin').style.display = 'none' } } return (
addToWallet(e)}>

Please select the (scanned) certificate PDF page, which you received from your doctor, pharmacy, vaccination centre or online.

} />
} />

Data privacy is of special importance when processing health-related data. In order for you to make an informed decision, please read the Privacy Policy.

} /> ) }