Using liascript PDF exporter,
$ docker run -it -v $PWD:/things ubuntu:22.04 bash
$ apt update
$ apt install wget xz-utils python3
$ wget --quiet https://nodejs.org/download/release/v14.20.1/node-v14.20.1-linux-x64.tar.xz
$ mkdir -p /usr/local/lib/
$ tar xf node-v14.20.1-linux-x64.tar.xz -C /usr/local/lib/
$ export PATH=/usr/local/lib/node-v14.20.1-linux-x64/bin:$PATH
$ apt install --no-install-recommends --yes libglib2.0-dev libnss3 libnspr4 libatk1.0-dev libatk-bridge2.0-dev libcups2-dev libdrm-dev libdbus-1-dev libatspi2.0-dev libx11-dev libxcomposite-dev libxdamage-dev libxext-dev libxfixes-dev libxrandr-dev libgbm-dev libxcb1-dev libxkbcommon-dev libpango1.0-dev libcairo2-dev libasound2-dev
$ npm install -g @liascript/exporter --unsafe-perm
$ cat project/README.md
# Title
Lorem ipsum.
$ liaex --format pdf -i project/README.md
Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.
(node:4827) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!
[1021/125829.490887:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
at onClose (/usr/local/lib/node-v14.20.1-linux-x64/lib/node_modules/@liascript/exporter/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:241:20)
at Interface.<anonymous> (/usr/local/lib/node-v14.20.1-linux-x64/lib/node_modules/@liascript/exporter/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:231:68)
at Interface.emit (events.js:412:35)
at Interface.close (readline.js:530:8)
at Socket.onend (readline.js:254:10)
at Socket.emit (events.js:412:35)
at endReadableNT (internal/streams/readable.js:1333:12)
at processTicksAndRejections (internal/process/task_queues.js:82:21)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:4827) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:4827) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
$ patch < index.patch
$ liaex --format pdf -i project/README.md
Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.
depending on the size of the course, this can take a while, please be patient...
$ npm -g ls | grep puppeteer
| +-- [email protected]
Testing puppeteer PDF export,
$ mkdir npmproj && cd npmproj
$ npm init
$ npm install [email protected] --save --unsafe-perm
$ node pdf.js
File contents,
$ cat index.patch
--- /usr/local/lib/node-v14.20.1-linux-x64/lib/node_modules/@liascript/exporter/dist/index.js 2022-10-21 13:26:53.361741961 +0000
+++ /usr/local/lib/node-v14.20.1-linux-x64/lib/node_modules/@liascript/exporter/dist/index.js_patched 2022-10-21 13:43:30.569052137 +0000
@@ -12560,7 +12560,8 @@
'--disable-features=IsolateOrigins',
'--disable-site-isolation-trials',
'--unhandled-rejections=strict',
- '--disable-features=BlockInsecurePrivateNetworkRequests',
+ '--disable-features=BlockInsecurePrivateNetworkRequests',
+ '--no-sandbox',
],
headless: argument['pdf-preview'] ? false : true
});
$ cat example.html
<html>
<head>
<title>Example</title>
</head>
<body>
<p>Hello world!</p>
</body>
</html>
$ cat pdf.js
(adapted from here)
'use strict';
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: [
//'--headless',
'--no-sandbox'
]
});
const page = await browser.newPage();
//let url = 'https://google.com/' // works
//let url = 'file:///home/jovyan/npmproj/example.html' // works
// $ liaex --format web -i README.md
//let url = 'file:///home/jovyan/npmproj/output/index.html' // does not work, empty PDF!
// $ python3 -m http.server 54321 --directory output
let url = 'http://localhost:54321/' // works
await page.goto(url, {
waitUntil: 'networkidle2',
});
// page.pdf() is currently supported only in headless mode.
// @see https://bugs.chromium.org/p/chromium/issues/detail?id=753118
await page.pdf({
path: 'test.pdf',
format: 'letter',
});
await browser.close();
})();