mirror of
https://github.com/Investigamer/cardconjurer.git
synced 2025-07-26 21:04:58 -05:00
75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
//Configure sizes
|
|
var ppi = 600;
|
|
var page = [8.5 * ppi, 11 * ppi];
|
|
var cardWidth = 2.5 * ppi;
|
|
var cardHeight = 3.5 * ppi;
|
|
var cardMarginX = parseInt(document.querySelector('#cardMargin').value);
|
|
var cardMarginY = parseInt(document.querySelector('#cardMargin').value);
|
|
//Prepare variables/canvas/context
|
|
var imageList = [];
|
|
var canvas = document.querySelector('canvas');
|
|
var context = canvas.getContext('2d');
|
|
drawSheet();
|
|
|
|
|
|
function uploadCard(card) {
|
|
var img = new Image();
|
|
img.crossOrigin = 'anonymous';
|
|
img.onload = function() {imageList.push(this); drawSheet();}
|
|
img.src = card;
|
|
}
|
|
|
|
function drawSheet() {
|
|
canvas.width = page[0];
|
|
canvas.height = page[1];
|
|
context.clearRect(0, 0, page[0], page[1]);
|
|
const cardsX = Math.floor(page[0] / cardWidth);
|
|
const cardsY = Math.floor(page[1] / cardHeight);
|
|
var count = 0;
|
|
for (var i = imageList.length - 1; i >= 0 && count < cardsX * cardsY; i --) {
|
|
if (imageList[i].width > 1) {
|
|
context.drawImage(imageList[i], (page[0] - cardsX * cardWidth) / 2 + (count % cardsX) * (cardWidth + cardMarginX) - cardMarginX, (page[1] - cardsY * cardHeight) / 2 + (Math.floor(count / cardsX) % cardsY) * (cardHeight + cardMarginY) - cardMarginY, cardWidth, cardHeight);
|
|
}
|
|
count ++;
|
|
}
|
|
}
|
|
|
|
async function downloadSheet() {
|
|
var download = document.createElement('a');
|
|
download.download = 'print.png';
|
|
download.href = canvas.toDataURL();
|
|
document.body.appendChild(download);
|
|
await download.click();
|
|
download.remove();
|
|
}
|
|
|
|
function downloadPDF() {
|
|
var pageOrientation = 'portrait';
|
|
if (page[0] > page[1]) {
|
|
pageOrientation = 'landscape';
|
|
}
|
|
var doc = new jsPDF({
|
|
orientation: pageOrientation,
|
|
unit: 'in',
|
|
format: [page[0] / ppi, page[1] / ppi]
|
|
});
|
|
doc.addImage(canvas.toDataURL('image/png'), 'PNG', 0, 0, page[0] / ppi, page[1] / ppi);
|
|
doc.save('print.pdf');
|
|
}
|
|
|
|
function setPageSize(size = [8.5, 11]) {
|
|
page[0] = parseFloat(size[0]) * ppi;
|
|
page[1] = parseFloat(size[1]) * ppi;
|
|
drawSheet();
|
|
}
|
|
|
|
function setCardDistance(distance) {
|
|
cardMarginX = parseInt(distance);
|
|
cardMarginY = parseInt(distance);
|
|
drawSheet();
|
|
}
|
|
|
|
function changeOrientation() {
|
|
page = page.reverse();
|
|
drawSheet();
|
|
} |