Feature: Toggle Page Size between ISO A4 and US Letter

This commit is contained in:
Amruth Pillai
2022-10-15 00:54:59 +02:00
parent 136e143e12
commit f0f552a635
38 changed files with 903 additions and 783 deletions

View File

@ -8,7 +8,7 @@
"start": "node dist/main"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.186.0",
"@aws-sdk/client-s3": "^3.188.0",
"@nestjs/axios": "^0.1.0",
"@nestjs/common": "^9.1.4",
"@nestjs/config": "^2.2.0",
@ -23,14 +23,14 @@
"@nestjs/typeorm": "^9.0.1",
"@types/passport": "^1.0.11",
"bcryptjs": "^2.4.3",
"cache-manager": "^5.0.0",
"cache-manager": "^5.0.1",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2",
"cookie-parser": "^1.4.6",
"csvtojson": "^2.0.10",
"dayjs": "^1.11.5",
"google-auth-library": "^8.5.2",
"joi": "^17.6.2",
"joi": "^17.6.3",
"lodash": "^4.17.21",
"multer": "^1.4.4",
"nanoid": "^3.3.4",
@ -41,7 +41,7 @@
"passport-local": "^1.0.0",
"pdf-lib": "^1.17.1",
"pg": "^8.8.0",
"playwright-chromium": "^1.26.1",
"playwright-chromium": "^1.27.1",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2",
"rxjs": "^7.5.7",
@ -57,7 +57,7 @@
"@types/express": "^4.17.14",
"@types/lodash": "^4.14.186",
"@types/multer": "^1.4.7",
"@types/node": "^18.8.3",
"@types/node": "^18.8.5",
"@types/nodemailer": "^6.4.6",
"@types/passport-jwt": "^3.0.7",
"@types/passport-local": "^1.0.34",

View File

@ -932,6 +932,9 @@ export class IntegrationsService {
body: get(jsonResume, 'metadata.fontSize'),
},
},
page: {
format: 'A4',
},
theme: {
background: get(jsonResume, 'metadata.colors.background'),
primary: get(jsonResume, 'metadata.colors.primary'),

View File

@ -1,6 +1,7 @@
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { SchedulerRegistry } from '@nestjs/schedule';
import { PageConfig } from '@reactive-resume/schema';
import { mkdir, unlink, writeFile } from 'fs/promises';
import { nanoid } from 'nanoid';
import { join } from 'path';
@ -35,13 +36,18 @@ export class PrinterService implements OnModuleInit, OnModuleDestroy {
await page.goto(`${url}/${username}/${slug}/printer?secretKey=${secretKey}`);
await page.waitForSelector('html.wf-active');
const resumePages = await page.$$eval('[data-page]', (pages) => {
return pages.map((page, index) => ({
const pageFormat: PageConfig['format'] = await page.$$eval(
'[data-page]',
(pages) => pages[0].getAttribute('data-format') as PageConfig['format']
);
const resumePages = await page.$$eval('[data-page]', (pages) =>
pages.map((page, index) => ({
pageNumber: index + 1,
innerHTML: page.innerHTML,
height: page.clientHeight,
}));
});
}))
);
const pdf = await PDFDocument.create();
const directory = join(__dirname, '..', 'assets/exports');
@ -52,9 +58,9 @@ export class PrinterService implements OnModuleInit, OnModuleDestroy {
await page.evaluate((page) => (document.body.innerHTML = page.innerHTML), resumePages[index]);
const buffer = await page.pdf({
width: '210mm',
printBackground: true,
height: resumePages[index].height,
width: pageFormat === 'A4' ? '210mm' : '216mm',
});
const pageDoc = await PDFDocument.load(buffer);

View File

@ -138,6 +138,9 @@ const defaultState: Partial<Resume> = {
date: {
format: 'MMMM DD, YYYY',
},
page: {
format: 'A4',
},
layout: [
[
['work', 'education', 'projects', 'volunteer', 'references'],