46 lines
1.7 KiB
HTML
46 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>PDF to PNG Chunked</title>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.js"></script>
|
|
</head>
|
|
<body>
|
|
<canvas id="the-canvas"></canvas>
|
|
<div id="status">Loading...</div>
|
|
<script>
|
|
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js';
|
|
|
|
async function convert() {
|
|
try {
|
|
const url = 'http://localhost:3001/Skyfly%20%20logo.pdf';
|
|
const loadingTask = pdfjsLib.getDocument(url);
|
|
const pdf = await loadingTask.promise;
|
|
const page = await pdf.getPage(1);
|
|
|
|
const scale = 3;
|
|
const viewport = page.getViewport({ scale: scale });
|
|
|
|
const canvas = document.getElementById('the-canvas');
|
|
const context = canvas.getContext('2d');
|
|
canvas.height = viewport.height;
|
|
canvas.width = viewport.width;
|
|
|
|
await page.render({ canvasContext: context, viewport: viewport }).promise;
|
|
|
|
const dataUrl = canvas.toDataURL('image/png');
|
|
const chunkSize = 50000;
|
|
console.log('CHUNKS_TOTAL', Math.ceil(dataUrl.length / chunkSize));
|
|
for (let i = 0; i < dataUrl.length; i += chunkSize) {
|
|
console.log('CHUNK_' + (i / chunkSize), dataUrl.substring(i, i + chunkSize));
|
|
}
|
|
console.log('CHUNKS_FINISHED');
|
|
document.body.setAttribute('data-status', 'done');
|
|
} catch (err) {
|
|
console.error(err);
|
|
}
|
|
}
|
|
convert();
|
|
</script>
|
|
</body>
|
|
</html>
|