Files
ReceiptGenerator/src/renderer/raster.ts
T

16 lines
812 B
TypeScript

import { getDocument,GlobalWorkerOptions } from 'pdfjs-dist'
import workerUrl from 'pdfjs-dist/build/pdf.worker.min.mjs?url'
GlobalWorkerOptions.workerSrc=workerUrl
declare global { interface Window {renderPdf:(base64:string,dpi:number)=>Promise<string>} }
window.renderPdf=async(base64,dpi)=>{
const data=Uint8Array.from(atob(base64),v=>v.charCodeAt(0))
const doc=await getDocument({data}).promise
try{
const page=await doc.getPage(1),viewport=page.getViewport({scale:dpi/72})
const canvas=document.getElementById('canvas') as HTMLCanvasElement
canvas.width=Math.ceil(viewport.width);canvas.height=Math.ceil(viewport.height)
await page.render({canvas,canvasContext:canvas.getContext('2d')!,viewport,background:'white'}).promise
return canvas.toDataURL('image/png')
}finally{await doc.destroy()}
}