Johnny.sh

Tool thing

Potentially useful: website-pdf

Alternatively, just use puppeteer:

  
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const puppeteer = require('puppeteer');
const http = require('http');
const express = require('express');
const serveStatic = require('serve-static');

const writeFile = promisify(fs.writeFile);

const FORMAT = 'A4';
const PORT = 4200;
const BASE_PATH = `http://localhost:${PORT}`;

const SOURCE_PATH = path.normalize(`${process.cwd()}/dist`);
const OUTPUT_PATH = path.normalize(`${process.cwd()}/dist/john-roberts.pdf`);

const startServer = () => {
  const app = express().use('/', serveStatic(SOURCE_PATH));
  const server = http.createServer(app);
  server.listen(PORT);
  return server;
};

/* eslint-disable no-console */

(async () => {
  try {
    startServer();
    const browser = await puppeteer.launch({
      headless: true,
      args: ['--no-sandbox', '--disable-setuid-sandbox'],
    });
    const page = await browser.newPage();
    await page.setUserAgent('pup');
    await page.goto(BASE_PATH, { waitUntil: 'networkidle0' });
    const pdf = await page.pdf({ format: FORMAT, scale: 0.77 });
    await writeFile(OUTPUT_PATH, pdf);
  } catch (error) {
    console.log('BOOOO. FAILED TO GENERATE PDF. BOOBOOOBOO YOU SUCK BOOOO.');
    console.error(error);
    process.exit(1);
  }
  console.log('created PDF. Nooiiiiice m8. ight then peace.');
  process.exit(0);
})();

/* eslint-enable no-console */ 
Last modified: July 20, 2020
/about
/uses
/notes
/talks
/projects
/podcasts
/reading-list
/spotify
© 2024