pdf-to-images-browser
Version:
A lightweight, no-configuration PDF-to-image library for browsers
2 lines • 2.86 kB
JavaScript
;var pdfjsDist=require('pdfjs-dist');var u=class extends Error{constructor(t){super(t),this.name="PDFToImagesError";}},d=class extends u{constructor(){super("This library requires a browser environment");}},b=class extends u{constructor(){super("Invalid pages option");}},D=class extends u{constructor(){super("Invalid output option");}},g=class extends u{constructor(){super("Canvas toBlob failed");}},h=class extends u{constructor(){super("PDF document is not initialized");}};var w={format:"png",output:"base64",pages:"all",scale:1};function x(e){let t=e.indexOf(";base64,")+8;return e.substring(t)}function A(e){let t=e.split(";base64,").pop(),r=window.atob(t),o=new Uint8Array(r.length);for(let n=0;n<r.length;n++)o[n]=r.charCodeAt(n);return o.buffer}function F(e,t){let r=[];for(let o=e;o<=t;o++)r.push(o);return r}function I(e,t){let{docParams:r,...o}={...w,...t},n;e instanceof ArrayBuffer?n={data:e,...r}:e instanceof File?n={url:URL.createObjectURL(e),...r}:n={url:e,...r};let i={...o};return {documentParams:n,opts:i}}async function T(e,t,r){if(!e)throw new h;let{scale:o=1,format:n="png",output:i="base64"}=r,s=await e.getPage(t),p=s.getViewport({scale:o}),m=document.createElement("canvas"),a=m.getContext("2d",{alpha:false});m.height=p.height,m.width=p.width;let P={canvasContext:a,viewport:p,enableWebGL:true};try{return await s.render(P).promise,await S(m,n==="jpg"?"image/jpeg":"image/png",i)}finally{m.width=0,m.height=0,s.cleanup(),await new Promise(c=>setTimeout(c,0));}}async function S(e,t,r){try{switch(r){case"dataurl":return e.toDataURL(t);case"base64":return x(e.toDataURL(t));case"buffer":{let o=x(e.toDataURL(t));return A(o)}case"blob":return new Promise((o,n)=>{e.toBlob(i=>i?o(i):n(new g),t);});default:throw new D}}catch{throw new g}}async function j(e,t){let{documentParams:r,opts:o}=I(e,t);return await U(r,o)}async function U(e,t){let{batchSize:r=3,batchDelay:o=100,onProgress:n}=t,i=null,s=[],p=[];try{i=await pdfjsDist.getDocument(e).promise;let m=i.numPages,a=t.pages||"all";if(a==="all")s=Array.from({length:m},(c,f)=>f+1);else if(a==="first")s=[1];else if(a==="last")s=[m];else if(typeof a=="number")s=[Math.max(a,1)];else if(Array.isArray(a))s=a.length?a:[1];else if(typeof a=="object"){let c=a.start??1,f=a.end??m;s=F(c,f);}else throw new b;let P=s.length;for(let c=0;c<s.length;c+=r){let y=s.slice(c,c+r).map(l=>T(i,l,t));try{let l=await Promise.all(y);p.push(...l),n&&n({completed:Math.min(c+r,P),total:P,batch:l}),c+r<s.length&&await new Promise(B=>setTimeout(B,o));}finally{y.length=0,await new Promise(l=>setTimeout(l,0));}}return p}finally{s&&(s.length=0),i&&await i.destroy(),p.length>0&&(p.length=0);}}if(typeof window>"u")throw new d;pdfjsDist.GlobalWorkerOptions.workerSrc||(pdfjsDist.GlobalWorkerOptions.workerSrc="https://unpkg.com/pdfjs-dist@4.10.38/build/pdf.worker.min.mjs");
module.exports=j;