Sign inSign up

overmob/pdfer

By overmob

•Updated over 1 year ago

Immagine Docker per generare PDF con Puppeteer e Google Chrome via API

Image
Developer tools
0

10K+

overmob/pdfer repository overview

⁠PDF Generator API

Un'applicazione Node.js basata su Express per generare PDF utilizzando Puppeteer e Google Chrome tramite API.

⁠Funzionalità

  • Generazione di PDF a partire da contenuto HTML.
  • Configurazione dinamica di limiti di concorrenza, coda e timeout.
  • Supporto per intestazioni e piè di pagina personalizzati nei PDF.
  • Limite configurabile per la dimensione del payload JSON.

⁠Requisiti

  • Docker e Docker Compose installati.
  • Node.js (se eseguito localmente).

⁠Configurazione

⁠Variabili di ambiente

Le seguenti variabili di ambiente possono essere configurate:

  • CONCURRENT: Numero massimo di richieste concorrenti (default: 1).
  • QUEUED: Numero massimo di richieste in coda (default: 10).
  • MAX_PAYLOAD_SIZE: Dimensione massima del payload JSON (default: 1mb).
  • TIMEOUT: Timeout massimo per la generazione del PDF in millisecondi (default: 60000).
⁠Porte

L'applicazione è esposta sulla porta 3000.

⁠Utilizzo

⁠Avvio con Docker Compose
  1. Costruisci e avvia il container:

    docker-compose up --build
    
  2. Invia una richiesta alle API:

    curl --location 'http://localhost:3000/pdf' \
    --header 'Content-Type: application/json' \
    --data-raw ' 
     {
         "html": "<html lang=\"it\">\n<head>\n    <title>Invoice</title>\n    <body> Hello! <img src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzUwIiBoZWlnaHQ9IjI1OSIgdmlld0JveD0iMCAwIDM1MCAyNTkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0yOTguNzk2IDE4NC4zODRWMjUxLjMwN0MyOTguNzk2IDI1My4xNSAyOTguMTU1IDI1NC44NDMgMjk3LjA4NCAyNTYuMTU1TDIyNy4zODYgMTI1LjY5NEwyOTguNzk2IDE4NC4zODRaIiBmaWxsPSIjRDQ1NzAwIi8+CjxwYXRoIGQ9Ik0yOTcuMDk0IDI1Ni4xNDRDMjk1LjY4MiAyNTcuODg3IDI5My41MjggMjU4Ljk5OSAyOTEuMTA1IDI1OC45OTlIMTc2LjkyOVYxNzYuMTUxTDE3Ni44NjkgMTc2LjA3MUwyMjcuMzk3IDEyNS41NDNWMTI1LjY3M0wyOTcuMDk0IDI1Ni4xMzRWMjU2LjE0NFoiIGZpbGw9IiNGRjdBMDAiLz4KPHBhdGggZD0iTTE5Ni44MjggNi4yNTk2N0wyMjcuMzQ1IDEyNS45MjRMMzQ3LjAxIDk1LjQwNzFDMzUwLjQzNSA5NC41MzU3IDM1MS4wOTYgODkuOTU4NyAzNDguMDUxIDg4LjE1NTlMMjgxLjI3OSA0OC41MjQ4TDI3NS4yODkgNDQuOTc5NEwyMDIuNjg3IDEuODcyOTFDMTk5LjY1MyAwLjA3MDEyNzYgMTk1Ljk0NyAyLjg0NDQxIDE5Ni44MTggNi4yNTk2N0gxOTYuODI4WiIgZmlsbD0iI0ZGN0EwMCIvPgo8cGF0aCBkPSJNMTc2LjkxNyAxNzYuMTUxVjI1OC45OTlIMTI5LjI0NEMxMjcuODAyIDI1OC45OTkgMTI2LjQxIDI1OC40ODggMTI1LjMxOCAyNTcuNTY2VjEyNi4wMzRDMTI2LjUgMTI2LjI2NCAxMjcuNjMxIDEyNi44NDUgMTI4LjQ5MyAxMjcuNzA2TDE3Ni44NTcgMTc2LjA3MUwxNzYuOTE3IDE3Ni4xNTFaIiBmaWxsPSIjRDQ1NzAwIi8+CjxwYXRoIGQ9Ik0yOTAuODg0IDU0LjIyMzRMMjgxLjI4OSA0OC41MTQ2TDI3NS4zIDQ0Ljk2OTFMMjQwLjU1NyAyNC4zMzczTDI0My4yODEgMy40NTUxNEMyNDMuNzQyIC0wLjA0MDI0OCAyNDguMjA4IC0xLjI1MjE0IDI1MC4zNTIgMS41NTIxOEwyOTAuODg0IDU0LjIxMzRWNTQuMjIzNFoiIGZpbGw9IiNENDU3MDAiLz4KPHBhdGggZD0iTTYyLjY1MjggMTI1LjU1M1YxOTQuNTZMNTIuNjM3NCAxODQuNTQ0TDEuMzI4MzEgMTMzLjIzNUMtMS41MDYwNiAxMzAuNDAxIDAuNDk2OTk5IDEyNS41NTMgNC40OTMxNiAxMjUuNTUzSDYyLjY1MjhaIiBmaWxsPSIjRTdFREY2Ii8+CjxwYXRoIGQ9Ik0xMjUuMzE4IDEyNi4wMTRWMjU3LjU1N0MxMjUuMTk4IDI1Ny40MzcgMTI1LjA2OCAyNTcuMzM3IDEyNC45MjcgMjU3LjE5Nkw2Mi42NTE0IDE5NC45MlYxMjUuOTE0SDEyNC4xNjZDMTI0LjU1NyAxMjUuOTE0IDEyNC45MzcgMTI1Ljk0NCAxMjUuMzA4IDEyNi4wMTRIMTI1LjMxOFoiIGZpbGw9IiNGRjdBMDAiLz4KPHBhdGggZD0iTTIyNy4zOTcgMTI1LjY4NEwyOTguNzg4IDE4NC4zNzRWMTA3LjcwNkwyMjcuMzk3IDEyNS42ODRaIiBmaWxsPSIjRTdFREY2Ii8+CjxwYXRoIGQ9Ik0yNzAuMzA1IDY5LjYxNzFDMjY5LjA5MyA2OS42MTcxIDI2OC4xMjIgNjguNzY1NyAyNjcuNzQxIDY3LjYwMzlDMjY2Ljg5IDY0Ljk5OTkgMjY0LjQ0NiA2My4wOTcgMjYxLjU0MSA2My4wOTdDMjU4LjYzNyA2My4wOTcgMjU2LjE5MyA2NC45ODk5IDI1NS4zNDIgNjcuNjAzOUMyNTQuOTYxIDY4Ljc1NTcgMjUzLjk5IDY5LjYxNzEgMjUyLjc3OCA2OS42MTcxQzI1MS4wMTUgNjkuNjE3MSAyNDkuNzEzIDY3LjkwNDQgMjUwLjIyNCA2Ni4yMTE4QzI1MS42ODYgNjEuMzQ0MyAyNTYuMjAzIDU3Ljc5ODggMjYxLjU0MSA1Ny43OTg4QzI2Ni44OCA1Ny43OTg4IDI3MS4zOTcgNjEuMzQ0MyAyNzIuODU5IDY2LjIxMThDMjczLjM3IDY3LjkwNDQgMjcyLjA2OCA2OS42MDcgMjcwLjMwNSA2OS42MDdWNjkuNjE3MVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=\"> \n</body>\n</html>\n",
         "options": {
             "displayHeaderFooter": true,
             "printBackground": false,
             "format": "A4",
             "headerTemplate": "<style>\n    header {\n        font-size: 20px;\n        font-weight: bold;\n        padding: 0 1cm;\n        height: 2cm;\n        width: 100%;\n    }\n    header img {\n        height: 2cm;\n    }\n</style>\n\n<header>\n    <div>\n        <table style=\"width: 100%;\">\n            <tr>\n                <td style=\"text-align: left;\">\n                                            <img src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzUwIiBoZWlnaHQ9IjI1OSIgdmlld0JveD0iMCAwIDM1MCAyNTkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0yOTguNzk2IDE4NC4zODRWMjUxLjMwN0MyOTguNzk2IDI1My4xNSAyOTguMTU1IDI1NC44NDMgMjk3LjA4NCAyNTYuMTU1TDIyNy4zODYgMTI1LjY5NEwyOTguNzk2IDE4NC4zODRaIiBmaWxsPSIjRDQ1NzAwIi8+CjxwYXRoIGQ9Ik0yOTcuMDk0IDI1Ni4xNDRDMjk1LjY4MiAyNTcuODg3IDI5My41MjggMjU4Ljk5OSAyOTEuMTA1IDI1OC45OTlIMTc2LjkyOVYxNzYuMTUxTDE3Ni44NjkgMTc2LjA3MUwyMjcuMzk3IDEyNS41NDNWMTI1LjY3M0wyOTcuMDk0IDI1Ni4xMzRWMjU2LjE0NFoiIGZpbGw9IiNGRjdBMDAiLz4KPHBhdGggZD0iTTE5Ni44MjggNi4yNTk2N0wyMjcuMzQ1IDEyNS45MjRMMzQ3LjAxIDk1LjQwNzFDMzUwLjQzNSA5NC41MzU3IDM1MS4wOTYgODkuOTU4NyAzNDguMDUxIDg4LjE1NTlMMjgxLjI3OSA0OC41MjQ4TDI3NS4yODkgNDQuOTc5NEwyMDIuNjg3IDEuODcyOTFDMTk5LjY1MyAwLjA3MDEyNzYgMTk1Ljk0NyAyLjg0NDQxIDE5Ni44MTggNi4yNTk2N0gxOTYuODI4WiIgZmlsbD0iI0ZGN0EwMCIvPgo8cGF0aCBkPSJNMTc2LjkxNyAxNzYuMTUxVjI1OC45OTlIMTI5LjI0NEMxMjcuODAyIDI1OC45OTkgMTI2LjQxIDI1OC40ODggMTI1LjMxOCAyNTcuNTY2VjEyNi4wMzRDMTI2LjUgMTI2LjI2NCAxMjcuNjMxIDEyNi44NDUgMTI4LjQ5MyAxMjcuNzA2TDE3Ni44NTcgMTc2LjA3MUwxNzYuOTE3IDE3Ni4xNTFaIiBmaWxsPSIjRDQ1NzAwIi8+CjxwYXRoIGQ9Ik0yOTAuODg0IDU0LjIyMzRMMjgxLjI4OSA0OC41MTQ2TDI3NS4zIDQ0Ljk2OTFMMjQwLjU1NyAyNC4zMzczTDI0My4yODEgMy40NTUxNEMyNDMuNzQyIC0wLjA0MDI0OCAyNDguMjA4IC0xLjI1MjE0IDI1MC4zNTIgMS41NTIxOEwyOTAuODg0IDU0LjIxMzRWNTQuMjIzNFoiIGZpbGw9IiNENDU3MDAiLz4KPHBhdGggZD0iTTYyLjY1MjggMTI1LjU1M1YxOTQuNTZMNTIuNjM3NCAxODQuNTQ0TDEuMzI4MzEgMTMzLjIzNUMtMS41MDYwNiAxMzAuNDAxIDAuNDk2OTk5IDEyNS41NTMgNC40OTMxNiAxMjUuNTUzSDYyLjY1MjhaIiBmaWxsPSIjRTdFREY2Ii8+CjxwYXRoIGQ9Ik0xMjUuMzE4IDEyNi4wMTRWMjU3LjU1N0MxMjUuMTk4IDI1Ny40MzcgMTI1LjA2OCAyNTcuMzM3IDEyNC45MjcgMjU3LjE5Nkw2Mi42NTE0IDE5NC45MlYxMjUuOTE0SDEyNC4xNjZDMTI0LjU1NyAxMjUuOTE0IDEyNC45MzcgMTI1Ljk0NCAxMjUuMzA4IDEyNi4wMTRIMTI1LjMxOFoiIGZpbGw9IiNGRjdBMDAiLz4KPHBhdGggZD0iTTIyNy4zOTcgMTI1LjY4NEwyOTguNzg4IDE4NC4zNzRWMTA3LjcwNkwyMjcuMzk3IDEyNS42ODRaIiBmaWxsPSIjRTdFREY2Ii8+CjxwYXRoIGQ9Ik0yNzAuMzA1IDY5LjYxNzFDMjY5LjA5MyA2OS42MTcxIDI2OC4xMjIgNjguNzY1NyAyNjcuNzQxIDY3LjYwMzlDMjY2Ljg5IDY0Ljk5OTkgMjY0LjQ0NiA2My4wOTcgMjYxLjU0MSA2My4wOTdDMjU4LjYzNyA2My4wOTcgMjU2LjE5MyA2NC45ODk5IDI1NS4zNDIgNjcuNjAzOUMyNTQuOTYxIDY4Ljc1NTcgMjUzLjk5IDY5LjYxNzEgMjUyLjc3OCA2OS42MTcxQzI1MS4wMTUgNjkuNjE3MSAyNDkuNzEzIDY3LjkwNDQgMjUwLjIyNCA2Ni4yMTE4QzI1MS42ODYgNjEuMzQ0MyAyNTYuMjAzIDU3Ljc5ODggMjYxLjU0MSA1Ny43OTg4QzI2Ni44OCA1Ny43OTg4IDI3MS4zOTcgNjEuMzQ0MyAyNzIuODU5IDY2LjIxMThDMjczLjM3IDY3LjkwNDQgMjcyLjA2OCA2OS42MDcgMjcwLjMwNSA2OS42MDdWNjkuNjE3MVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=\">                                    </td>\n                <td style=\"text-align: center;\">Ordini di lavoro</td>\n                <td style=\"text-align: right;\">\n                                                                             </td>\n            </tr>\n        </table>\n    </div>\n</header>\n",
             "footerTemplate": "<style>\n    footer {\n        font-size: 12px;\n        padding: 0 1cm;\n        height: 1cm;\n    }\n</style>\n\n<footer>\n    <span class=\"pageNumber\"></span> / <span class=\"totalPages\"></span></footer>\n",
             "margin": {
                 "top": "3cm",
                 "right": "1cm",
                 "bottom": "2cm",
                 "left": "1cm"
             }
         }
     }
     '
    
    

Tag summary

Content type

Image

Digest

sha256:e1cb79de9…

Size

454.7 MB

Last updated

over 1 year ago

docker pull overmob/pdfer