mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-06-06 18:30:57 +00:00
139 lines
4.3 KiB
JavaScript
139 lines
4.3 KiB
JavaScript
![]() |
let pdfCanvas = document.getElementById('cropPdfCanvas');
|
||
|
let overlayCanvas = document.getElementById('overlayCanvas');
|
||
|
let canvasesContainer = document.getElementById('canvasesContainer');
|
||
|
canvasesContainer.style.display = 'none';
|
||
|
// let paginationBtnContainer = ;
|
||
|
|
||
|
let context = pdfCanvas.getContext('2d');
|
||
|
let overlayContext = overlayCanvas.getContext('2d');
|
||
|
|
||
|
let btn1Object = document.getElementById('previous-page-btn');
|
||
|
let btn2Object = document.getElementById('next-page-btn');
|
||
|
overlayCanvas.width = pdfCanvas.width;
|
||
|
overlayCanvas.height = pdfCanvas.height;
|
||
|
|
||
|
let fileInput = document.getElementById('fileInput-input');
|
||
|
|
||
|
let file;
|
||
|
|
||
|
let pdfDoc = null;
|
||
|
let pageId = document.getElementById('pageId');
|
||
|
let currentPage = 1;
|
||
|
let totalPages = 0;
|
||
|
|
||
|
let startX = 0;
|
||
|
let startY = 0;
|
||
|
let rectWidth = 0;
|
||
|
let rectHeight = 0;
|
||
|
|
||
|
let timeId = null; // timeout id for resizing canvases event
|
||
|
|
||
|
btn1Object.addEventListener('click', function (e) {
|
||
|
if (currentPage !== 1) {
|
||
|
currentPage = currentPage - 1;
|
||
|
pageId.value = currentPage;
|
||
|
|
||
|
if (file.type === 'application/pdf') {
|
||
|
let reader = new FileReader();
|
||
|
reader.onload = function (ev) {
|
||
|
let typedArray = new Uint8Array(reader.result);
|
||
|
pdfjsLib.GlobalWorkerOptions.workerSrc = './pdfjs-legacy/pdf.worker.mjs';
|
||
|
pdfjsLib.getDocument(typedArray).promise.then(function (pdf) {
|
||
|
pdfDoc = pdf;
|
||
|
totalPages = pdf.numPages;
|
||
|
renderPage(currentPage);
|
||
|
});
|
||
|
};
|
||
|
reader.readAsArrayBuffer(file);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
btn2Object.addEventListener('click', function (e) {
|
||
|
if (currentPage !== totalPages) {
|
||
|
currentPage = currentPage + 1;
|
||
|
pageId.value = currentPage;
|
||
|
|
||
|
if (file.type === 'application/pdf') {
|
||
|
let reader = new FileReader();
|
||
|
reader.onload = function (ev) {
|
||
|
let typedArray = new Uint8Array(reader.result);
|
||
|
pdfjsLib.GlobalWorkerOptions.workerSrc = './pdfjs-legacy/pdf.worker.mjs';
|
||
|
pdfjsLib.getDocument(typedArray).promise.then(function (pdf) {
|
||
|
pdfDoc = pdf;
|
||
|
totalPages = pdf.numPages;
|
||
|
renderPage(currentPage);
|
||
|
});
|
||
|
};
|
||
|
reader.readAsArrayBuffer(file);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
function renderPageFromFile(file) {
|
||
|
if (file.type === 'application/pdf') {
|
||
|
let reader = new FileReader();
|
||
|
reader.onload = function (ev) {
|
||
|
let typedArray = new Uint8Array(reader.result);
|
||
|
pdfjsLib.GlobalWorkerOptions.workerSrc = './pdfjs-legacy/pdf.worker.mjs';
|
||
|
pdfjsLib.getDocument(typedArray).promise.then(function (pdf) {
|
||
|
pdfDoc = pdf;
|
||
|
totalPages = pdf.numPages;
|
||
|
renderPage(currentPage);
|
||
|
});
|
||
|
pageId.value = currentPage;
|
||
|
};
|
||
|
reader.readAsArrayBuffer(file);
|
||
|
document.getElementById('pagination-button-container').style.display = 'flex';
|
||
|
document.getElementById('instruction-text').style.display = 'block';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
window.addEventListener('resize', function () {
|
||
|
clearTimeout(timeId);
|
||
|
timeId = setTimeout(function () {
|
||
|
if (fileInput.files.length == 0) return;
|
||
|
let canvasesContainer = document.getElementById('canvasesContainer');
|
||
|
let containerRect = canvasesContainer.getBoundingClientRect();
|
||
|
|
||
|
context.clearRect(0, 0, pdfCanvas.width, pdfCanvas.height);
|
||
|
|
||
|
overlayContext.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height);
|
||
|
|
||
|
pdfCanvas.width = containerRect.width;
|
||
|
pdfCanvas.height = containerRect.height;
|
||
|
|
||
|
overlayCanvas.width = containerRect.width;
|
||
|
overlayCanvas.height = containerRect.height;
|
||
|
|
||
|
let file = fileInput.files[0];
|
||
|
renderPageFromFile(file);
|
||
|
}, 1000);
|
||
|
});
|
||
|
|
||
|
fileInput.addEventListener('change', function (e) {
|
||
|
fileInput.addEventListener('file-input-change', async (e) => {
|
||
|
const {allFiles} = e.detail;
|
||
|
if (allFiles && allFiles.length > 0) {
|
||
|
canvasesContainer.style.display = 'block'; // set for visual purposes
|
||
|
file = e.target.files[0];
|
||
|
renderPageFromFile(file);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
function renderPage(pageNumber) {
|
||
|
pdfDoc.getPage(pageNumber).then(function (page) {
|
||
|
let viewport = page.getViewport({scale: 1.0});
|
||
|
pdfCanvas.width = viewport.width;
|
||
|
pdfCanvas.height = viewport.height;
|
||
|
|
||
|
overlayCanvas.width = viewport.width; // Match overlay canvas size with PDF canvas
|
||
|
overlayCanvas.height = viewport.height;
|
||
|
|
||
|
let renderContext = {canvasContext: context, viewport: viewport};
|
||
|
page.render(renderContext);
|
||
|
pdfCanvas.classList.add('shadow-canvas');
|
||
|
});
|
||
|
}
|