You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.3 KiB
JavaScript

/*
* 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;
}