From b79cb8e4ed463efa7c6be41763d60e44194aca82 Mon Sep 17 00:00:00 2001 From: "D. Bohdan" Date: Fri, 8 Sep 2023 14:13:53 +0000 Subject: [PATCH] gen-screenshot: switch to deno-puppeteer https://github.com/wkhtmltopdf/wkhtmltopdf has been archived. --- gen-screenshot.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/gen-screenshot.ts b/gen-screenshot.ts index 19e7173..29eab25 100755 --- a/gen-screenshot.ts +++ b/gen-screenshot.ts @@ -1,7 +1,9 @@ -#! /usr/bin/env -S deno run --allow-run --allow-read --allow-write +#! /usr/bin/env -S deno run --allow-env --allow-net --allow-read --allow-run --allow-write // Generate the screenshot and its thumbnail for a project. // To install the dependencies on Debian/Ubuntu: -// $ sudo apt install imagemagick optipng wkhtmltopdf +// $ sudo apt install imagemagick optipng + +import puppeteer from "https://deno.land/x/puppeteer@16.2.0/mod.ts"; const templateFile = "screenshot-page.html"; const temporaryFile = "temp.html"; @@ -20,15 +22,26 @@ if (Deno.args.length !== 2) { const screenshotFile = `${slugify(Deno.args[0])}.png`; const cssFile = Deno.args[1]; +const saveScreenshot = async (src: string, dest: string) => { + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + + await page.setViewport({ width: 1024, height: 1024, deviceScaleFactor: 1 }); + await page.goto(src); + await page.screenshot({ fullPage: true, path: dest }); + + await browser.close(); +}; + try { const htmlTemplate = await Deno.readTextFile(templateFile); const css = await Deno.readTextFile(cssFile); const html = htmlTemplate.replace(/%CSS_HERE%/, css); await Deno.writeTextFile(temporaryFile, html); - await Deno.run({ - cmd: ["wkhtmltoimage", temporaryFile, `screenshot/${screenshotFile}`], - }).status(); + const tempFilePath = await Deno.realPath(temporaryFile); + await saveScreenshot(`file://${tempFilePath}`, `screenshot/${screenshotFile}`); + await Deno.run({ cmd: [ "convert", @@ -40,6 +53,7 @@ try { `thumbnail/${screenshotFile}`, ], }).status(); + await Deno.run({ cmd: [ "optipng",