/* * Copyright 2021 Netsyms Technologies. * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ const {jsPDF} = window.jspdf; var pdfPageScale = 4; var pdfAssumedDPI = 72; var pdfDoc = null; var pageNumber = 0; function addPDF() { openFileDialog(function (path) { var filedata = getFileAsUint8Array(path); /** * Asynchronously downloads PDF. */ pdfjsLib.getDocument(filedata).promise.then(function (pdfDoc_) { pdfDoc = pdfDoc_; renderAllPages(pdfDoc); pdfZoom("fitwidth"); // Initial/first page rendering //renderPage(pageNum); }); }); } function savePDF() { var canvases = $("#page-canvas-container .page-canvas"); const pdf = new jsPDF({ unit: "in", compress: true }); // creating a PDF creates a blank page that we don't want to use, // as we haven't done the calculations yet pdf.deletePage(1); for (var i = 0; i < canvases.length; i++) { var canvas = $("#page-canvas-container .page-canvas")[i]; var widthpx = canvas.getContext("2d").canvas.width; var heightpx = canvas.getContext("2d").canvas.height; var pageWidthInches = widthpx / (pdfAssumedDPI * pdfPageScale); var pageHeightInches = heightpx / (pdfAssumedDPI * pdfPageScale); console.log(pageWidthInches + " x " + pageHeightInches); var pageFormat = [pageWidthInches, pageHeightInches]; var pageOrientation = (pageWidthInches > pageHeightInches ? "landscape" : "portrait"); pdf.addPage(pageFormat, pageOrientation); pdf.addImage($("#page-canvas-container .page-canvas")[i].toDataURL(), 0, 0, pageWidthInches, pageHeightInches); } pdf.save("signed.pdf"); } function pdfZoom(str) { disableGuideBox(); var widthpx = $("#page-canvas-container .page-canvas").css("width").replace("px", "") * 1; var zoomstep = 100; console.log(widthpx); switch (str) { case "out": $("#page-canvas-container .page-canvas").css("height", "auto"); widthpx -= zoomstep; $("#page-canvas-container .page-canvas").css("width", widthpx + "px"); break; case "in": $("#page-canvas-container .page-canvas").css("height", "auto"); widthpx += zoomstep; $("#page-canvas-container .page-canvas").css("width", widthpx + "px"); break; case "fitwidth": $("#page-canvas-container .page-canvas").css("width", "100%"); $("#page-canvas-container .page-canvas").css("height", "auto"); break; case "fitheight": $("#page-canvas-container .page-canvas").css("height", "100%"); $("#page-canvas-container .page-canvas").css("width", "auto"); break; } } function getNewCanvas(pagenumber) { var canvas = document.createElement('canvas'); canvas.id = "pdf-canvas-page-" + pagenumber; canvas.className = "page-canvas"; return canvas; } function addPage() { pageNumber++; var canvas = getNewCanvas(pageNumber); var prevPageCanvas = $("#page-canvas-container .page-canvas#pdf-canvas-page-" + (pageNumber - 1))[0]; canvas.width = prevPageCanvas.getContext("2d").canvas.width; canvas.height = prevPageCanvas.getContext("2d").canvas.height; $("#page-canvas-container").append(canvas); } function renderAllPages() { var startingPageNumber = pageNumber; var thisDocPageCount = pdfDoc.numPages; for (var i = 1; i <= pdfDoc.numPages; i++) { pdfDoc.getPage(i).then(function (page) { var viewport = page.getViewport({scale: pdfPageScale}); var canvas = getNewCanvas(page.pageNumber + startingPageNumber); canvas.height = viewport.height; canvas.width = viewport.width; $("#page-canvas-container").append(canvas); // Render PDF page into canvas context var renderContext = { canvasContext: canvas.getContext("2d"), viewport: viewport }; page.render(renderContext); }); } pageNumber = pageNumber + thisDocPageCount; document.getElementById('page_count').textContent = pageNumber; }