import puppeteer from 'puppeteer'; import fs from 'fs'; import moment from 'moment'; import PDFMerger from 'pdf-merger-js'; // get params from console let [ url, title = '', subtitle = '', date = moment().format('YYY-MM-DD') ] = process.argv.slice(2); const path = './pdf'; if (!fs.existsSync(path)) fs.mkdirSync(path); let browser; try{ // start puppeteer browser = await puppeteer.launch({ headless: true, args: [ "--disable-gpu", "--disable-dev-shm-usage", "--disable-setuid-sandbox", "--no-sandbox", ] }); // open page const page = await browser.newPage(); await page.goto(url, { waitUntil: 'networkidle0' }); console.log('page loaded'); // search for header and subheader in document if (!title) title = await (await page.waitForSelector('h1')).evaluate(el => el.textContent); if (!subtitle) subtitle = await (await page.waitForSelector('h2')).evaluate(el => el.textContent); console.log(title,subtitle); const filename = `${date}_${title.trim().replaceAll(' ', '_')}`; // deactivate @print css and add custom css (for pretty code) await page.emulateMediaType('screen'); await page.addStyleTag({content: ` body { text-shadow: none !important; } .hidden-print { display: none !important; } *:not(code, .code > *){ color: #000 !important; } `}); // create pdf for pages const pages = await page.pdf({ //path: `${path}/${filename}_pages.pdf`, format: 'A4', margin: { top: '20mm', bottom: '20mm', left: '12mm', right: '12mm' }, displayHeaderFooter: true, headerTemplate: `