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

@ -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'],