Cum sa convertesc un template html in PDF intr-un Docker cu NodeJS?

Am incercat mai multe librarii, problema e ca toate sunt bazate pe phantomjs, care aparent nu merge in Docker. Am incercam cam toate variantele posibile pe care le-am gasit.

Folosesc html-pdf package din npm, iar pe local merge perfect, dar in aws ecs primesc asta:

Error creating PDF: 
{
    "errno": -2,
    "code": "ENOENT",
    "syscall": "spawn /usr/src/app/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs",
    "path": "/usr/src/app/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs",
    "spawnargs": [
        "/usr/src/app/node_modules/html-pdf/lib/scripts/pdf_a4_portrait.js"
    ]
}

nu merge cu puppeteer?
incarci html cu un browser headless si salvezi ca pdf.

ps. nu am incercat practic, dar acolo as cauta prima data daca as avea taskul asta

Page | Playwright

Iti trebuie si Chrome, preferabil pe un server serverless in ECS/Fargate. PhantomJS e deprecated, il poti inlocui cu chromium/chromium headless.
Docker Hub

De fapt mai e o smecherie faina:

chrome --headless --disable-gpu --print-to-pdf <url>

Pe AWS mi se pare fainut
Sparticuz/chromium: Chromium (x86-64) for Serverless Platforms (github.com)

2 Likes

Phantom merge în docker, este nevoie să pui --disable-gpu cum a spus @isti37 mai sus.

Config de mai jos l-am folosit acum câțiva ani (poate s-au schimbat unele flag-uri sau au devenit obsolete). Poate te ajută.

puppeteer.launch({
        executablePath: executablePath(),
        headless: true,
        args: [
            "--disable-gpu",
            "--disable-dev-shm-usage",
            "--disable-setuid-sandbox",
            "--no-sandbox",
            '--disable-accelerated-2d-canvas',
            '--no-first-run',
            '--no-zygote',
            '--single-process', // <- this one doesn't works in Windows
        ]
    });