Skip to content

Instantly share code, notes, and snippets.

@zoutepopcorn
Created October 20, 2020 14:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zoutepopcorn/dc6cabf2d289a8565d209369a3a4ea9d to your computer and use it in GitHub Desktop.
Save zoutepopcorn/dc6cabf2d289a8565d209369a3a4ea9d to your computer and use it in GitHub Desktop.
babel-node index.js jspdf
import {jsPDF} from "jspdf";
import {encode, decode} from 'node-base64-image';
const B64 = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAAAklEQVR4AewaftIAAAJMSURBVO3BMWocVhiF0e9dpkjh0gtI50UYLcYgrcqN9zK4ygoGFdEG0qmY7qUNGFTkMn788J2z/oKN9D8FqRCkQpAKQSoEqRCkQpAKQSoEqRCkQpAKQSoEqRCkQpAKQSoEqRCkQpAKQSoEqRCkQpAKFx7sjy9f+PT0hH6/9+uV++3GI114sE9PT/z5/Tv6/d5eXrjfbjxSkApBKgSpEKRCkApBKgSpEKRCkApBKgSpEKRCkApBKgSpEKRCkApBKgSpEKRCkApBKlzQh/7+9o3/WsDmYwvYfGwBn75+5fPzM5Nd0If++fGDR9nA5+dnJgs6ZjFf0DGb+YKOWcwXdMxmviAVgo5ZzBd0zGa+IBWCVAg6ZjFf0DGb+YKOWcwXdMxmviAVgo5ZzBd0zGa+IBWCVAg6ZjFf0DGb+YKOWcwXdMxmviAVgo5ZzBd0zGa+IBWCVAg6ZjFf0DGb+YKOWcwXdMxmviAVgo5ZzBd0zGa+IBWCVAg6ZjFf0DGb+YKOWcwXdMxmviAVgo5ZzBd0zGa+IBWCVAg6ZjFf0DGb+YKOWcwXdMxmviAVgo5ZzBd0zGa+IBWCVAg6ZjFf0DGb+YKOWcwXdMxmviAVgo5ZzBd0zGa+IBWCVAg6ZjFf0DGb+YKOWcwXdMxmviAVgo5ZzHfhwd6vV95eXtCv3n/+5O3lhUd5v155tAsPdr/duN9u6Ff311fur69MFqRCkApBKgSpEKRCkApBKgSpEKRCkApBKgSpEKRCkApBKgSpEKRCkApBKgSpEKRCkApBKvwLKw1EpVhhTq4AAAAASUVORK5CYII=`
const doc = new jsPDF("p", "mm", "a4");
const placeImagesOnGrid = (images, imageCount = 4, padding = 3, spacing = 5) => {
const width = doc.internal.pageSize.getWidth();
const height = doc.internal.pageSize.getHeight();
const whiteSpaceX = (2 * spacing * imageCount) + (2 * padding);
const imageSize = (width - whiteSpaceX) / imageCount;
const renderRow = (row) => {
for (let i = 0; i < imageCount; i++) {
const x = padding + spacing + (i * imageSize) + (i * 2 * spacing);
const y = padding + spacing + (row * imageSize) + (row * 2 * spacing);
doc.addImage(images.shift(), "PNG", x, y, imageSize, imageSize);
}
}
const heightNoPadding = height - (2 * padding);
const imageWithSpacing = imageSize + (2 * spacing);
const ROWS = Math.floor(heightNoPadding / imageWithSpacing);
for(let i = 0; i < ROWS; i++) {
renderRow(i);
}
return images;
}
const arr = [];
for (let i = 0; i < 180; i++) {
arr.push(B64);
}
while(placeImagesOnGrid(arr).length > 0) {
doc.addPage('a4', 'p','mm');
console.log("new page");
}
doc.save("a4.pdf");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment