[{"data":1,"prerenderedAt":1092},["Reactive",2],{"/alternatives/puppeteer":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"dateModified":10,"author":11,"body":12,"_type":1087,"_id":1088,"_source":1089,"_file":1090,"_extension":1091},"/alternatives/puppeteer","alternatives",false,"","Puppeteer alternatives for PDF generation in 2026","Puppeteer alternatives for PDFs, sorted by what you still run: a browser, a hosted browser, or nothing. Plus the page.pdf() options you use, mapped to one API call.","2026-11-08","Cyril Nicodème",{"type":13,"children":14,"toc":1080},"root",[15,23,142,149,151,364,370,375,406,412,437,454,463,472,478,483,495,510,519,524,633,705,717,722,724,1054,1067],{"type":16,"tag":17,"props":18,"children":19},"element","p",{},[20],{"type":21,"value":22},"text","People don't buy PDFs. They buy not having to run Chromium. So if Puppeteer only makes your PDFs, pick its replacement by how much of the browser you still want to run. Playwright and Gotenberg keep the browser on your servers, and Browserless runs it for you. A PDF API like PDFShift takes your HTML in one request and sends back the PDF, so there's no browser on your side at all.",{"type":16,"tag":24,"props":25,"children":26},"figure",{},[27],{"type":16,"tag":28,"props":29,"children":38},"svg",{"viewBox":30,"xmlns":31,"role":32,"ariaLabelledBy":33,"style":36,"fontFamily":37},"0 0 360 360","http://www.w3.org/2000/svg","img",[34,35],"alt-kinds-title","alt-kinds-desc","max-width:360px;display:block;margin:0 auto","DM Sans, sans-serif",[39,45,51,62,71,79,85,91,96,102,108,114,121,127,133],{"type":16,"tag":40,"props":41,"children":42},"title",{"id":34},[43],{"type":21,"value":44},"What stays on your side with each kind of Puppeteer alternative",{"type":16,"tag":46,"props":47,"children":48},"desc",{"id":35},[49],{"type":21,"value":50},"Three boxes from top to bottom. A renderer you run (a browser or a layout engine): you keep engine updates, fonts, memory and restarts, and scaling. A browser someone else runs: you keep your browser code, waits and timeouts. No browser, a PDF API: you keep one HTTP request.",{"type":16,"tag":52,"props":53,"children":61},"rect",{"style":54,"x":55,"y":55,"width":56,"height":57,"rx":58,"fill":59,"stroke":60},"stroke-width:2","1.5","357","120","8","#FFFFFF","#DBE4F2",[],{"type":16,"tag":21,"props":63,"children":68},{"x":64,"y":65,"style":66,"fill":67},"20","32","font-size:16px;font-weight:600","#0A0C3D",[69],{"type":21,"value":70},"A renderer you run",{"type":16,"tag":21,"props":72,"children":76},{"x":64,"y":73,"style":74,"fill":75},"58","font-size:14px","#4C556D",[77],{"type":21,"value":78},"Engine updates and fonts",{"type":16,"tag":21,"props":80,"children":82},{"x":64,"y":81,"style":74,"fill":75},"80",[83],{"type":21,"value":84},"Memory, crashes and restarts",{"type":16,"tag":21,"props":86,"children":88},{"x":64,"y":87,"style":74,"fill":75},"102",[89],{"type":21,"value":90},"Scaling and queueing",{"type":16,"tag":52,"props":92,"children":95},{"style":54,"x":55,"y":93,"width":56,"height":94,"rx":58,"fill":59,"stroke":60},"135.5","98",[],{"type":16,"tag":21,"props":97,"children":99},{"x":64,"y":98,"style":66,"fill":67},"166",[100],{"type":21,"value":101},"A browser someone else runs",{"type":16,"tag":21,"props":103,"children":105},{"x":64,"y":104,"style":74,"fill":75},"192",[106],{"type":21,"value":107},"Your browser code",{"type":16,"tag":21,"props":109,"children":111},{"x":64,"y":110,"style":74,"fill":75},"214",[112],{"type":21,"value":113},"Waits and timeouts",{"type":16,"tag":52,"props":115,"children":120},{"style":54,"x":55,"y":116,"width":56,"height":117,"rx":58,"fill":118,"stroke":119},"247.5","76","#F3EFFF","#6C47FF",[],{"type":16,"tag":21,"props":122,"children":124},{"x":64,"y":123,"style":66,"fill":67},"278",[125],{"type":21,"value":126},"No browser: a PDF API",{"type":16,"tag":21,"props":128,"children":130},{"x":64,"y":129,"style":74,"fill":75},"304",[131],{"type":21,"value":132},"One HTTP request",{"type":16,"tag":21,"props":134,"children":139},{"x":135,"y":136,"textAnchor":137,"style":138,"fill":75},"180","350","middle","font-size:13px",[140],{"type":21,"value":141},"What stays on your side",{"type":16,"tag":143,"props":144,"children":146},"h2",{"id":145},"best-puppeteer-alternatives-for-pdf-generation-in-2026",[147],{"type":21,"value":148},"Best Puppeteer alternatives for PDF generation in 2026",{"type":21,"value":150},"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",{"type":16,"tag":152,"props":153,"children":154},"table",{},[155,179],{"type":16,"tag":156,"props":157,"children":158},"thead",{},[159],{"type":16,"tag":160,"props":161,"children":162},"tr",{},[163,169,174],{"type":16,"tag":164,"props":165,"children":166},"th",{},[167],{"type":21,"value":168},"Option",{"type":16,"tag":164,"props":170,"children":171},{},[172],{"type":21,"value":173},"What you still run",{"type":16,"tag":164,"props":175,"children":176},{},[177],{"type":21,"value":178},"What it costs you",{"type":16,"tag":180,"props":181,"children":182},"tbody",{},[183,206,224,242,259,277,295,313,330,347],{"type":16,"tag":160,"props":184,"children":185},{},[186,196,201],{"type":16,"tag":187,"props":188,"children":189},"td",{},[190],{"type":16,"tag":191,"props":192,"children":193},"strong",{},[194],{"type":21,"value":195},"PDFShift",{"type":16,"tag":187,"props":197,"children":198},{},[199],{"type":21,"value":200},"Nothing: one POST with your HTML or a URL, the PDF comes back",{"type":16,"tag":187,"props":202,"children":203},{},[204],{"type":21,"value":205},"50 free credits a month, no card; $9 a month for 500",{"type":16,"tag":160,"props":207,"children":208},{},[209,214,219],{"type":16,"tag":187,"props":210,"children":211},{},[212],{"type":21,"value":213},"Api2Pdf",{"type":16,"tag":187,"props":215,"children":216},{},[217],{"type":21,"value":218},"Nothing: you get back a link to the file, deleted after 24 hours",{"type":16,"tag":187,"props":220,"children":221},{},[222],{"type":21,"value":223},"$1 a month plus usage",{"type":16,"tag":160,"props":225,"children":226},{},[227,232,237],{"type":16,"tag":187,"props":228,"children":229},{},[230],{"type":21,"value":231},"PDFBolt",{"type":16,"tag":187,"props":233,"children":234},{},[235],{"type":21,"value":236},"Nothing",{"type":16,"tag":187,"props":238,"children":239},{},[240],{"type":21,"value":241},"50 free documents a month; $19 a month for 2,000",{"type":16,"tag":160,"props":243,"children":244},{},[245,250,254],{"type":16,"tag":187,"props":246,"children":247},{},[248],{"type":21,"value":249},"Doppio",{"type":16,"tag":187,"props":251,"children":252},{},[253],{"type":21,"value":236},{"type":16,"tag":187,"props":255,"children":256},{},[257],{"type":21,"value":258},"400 free docs a month; $16 a month for 4,000",{"type":16,"tag":160,"props":260,"children":261},{},[262,267,272],{"type":16,"tag":187,"props":263,"children":264},{},[265],{"type":21,"value":266},"DocRaptor",{"type":16,"tag":187,"props":268,"children":269},{},[270],{"type":21,"value":271},"Nothing (runs the Prince engine, not Chromium)",{"type":16,"tag":187,"props":273,"children":274},{},[275],{"type":21,"value":276},"5 free documents a month; $15 a month for 125",{"type":16,"tag":160,"props":278,"children":279},{},[280,285,290],{"type":16,"tag":187,"props":281,"children":282},{},[283],{"type":21,"value":284},"Browserless",{"type":16,"tag":187,"props":286,"children":287},{},[288],{"type":21,"value":289},"Your Puppeteer or Playwright code, connected to their browsers, or a call to their /pdf endpoint",{"type":16,"tag":187,"props":291,"children":292},{},[293],{"type":21,"value":294},"1,000 free units a month (a unit is up to 30 seconds of browser time)",{"type":16,"tag":160,"props":296,"children":297},{},[298,303,308],{"type":16,"tag":187,"props":299,"children":300},{},[301],{"type":21,"value":302},"Playwright",{"type":16,"tag":187,"props":304,"children":305},{},[306],{"type":21,"value":307},"Chromium, on your servers",{"type":16,"tag":187,"props":309,"children":310},{},[311],{"type":21,"value":312},"Free and open source, plus your servers",{"type":16,"tag":160,"props":314,"children":315},{},[316,321,326],{"type":16,"tag":187,"props":317,"children":318},{},[319],{"type":21,"value":320},"Gotenberg",{"type":16,"tag":187,"props":322,"children":323},{},[324],{"type":21,"value":325},"A Docker container with Chromium and LibreOffice",{"type":16,"tag":187,"props":327,"children":328},{},[329],{"type":21,"value":312},{"type":16,"tag":160,"props":331,"children":332},{},[333,338,343],{"type":16,"tag":187,"props":334,"children":335},{},[336],{"type":21,"value":337},"WeasyPrint",{"type":16,"tag":187,"props":339,"children":340},{},[341],{"type":21,"value":342},"A Python library with its own layout engine",{"type":16,"tag":187,"props":344,"children":345},{},[346],{"type":21,"value":312},{"type":16,"tag":160,"props":348,"children":349},{},[350,355,360],{"type":16,"tag":187,"props":351,"children":352},{},[353],{"type":21,"value":354},"wkhtmltopdf",{"type":16,"tag":187,"props":356,"children":357},{},[358],{"type":21,"value":359},"An old Qt WebKit binary, archived since January 2023",{"type":16,"tag":187,"props":361,"children":362},{},[363],{"type":21,"value":312},{"type":16,"tag":143,"props":365,"children":367},{"id":366},"what-running-puppeteer-for-pdfs-costs-you",[368],{"type":21,"value":369},"What running Puppeteer for PDFs costs you",{"type":16,"tag":17,"props":371,"children":372},{},[373],{"type":21,"value":374},"Puppeteer costs nothing to install. The bill comes from the browser it drives, and it grows when PDFs pile up at once.",{"type":16,"tag":17,"props":376,"children":377},{},[378,380,387,389,395,397,404],{"type":21,"value":379},"We tested Puppeteer 25.16.0 on one invoice, on an Apple M5 Pro. Launching a browser for each PDF took 1.47 seconds a job. Reusing one browser and waiting for ",{"type":16,"tag":381,"props":382,"children":384},"code",{"className":383},[],[385],{"type":21,"value":386},"load",{"type":21,"value":388}," plus ",{"type":16,"tag":381,"props":390,"children":392},{"className":391},[],[393],{"type":21,"value":394},"document.fonts.ready",{"type":21,"value":396}," got it to 0.24 seconds, but now you have to manage that browser. Leave pages open after each job, and Chromium goes from 323 MB to 5,046 MB over 200 jobs. We walk through the fixes in ",{"type":16,"tag":398,"props":399,"children":401},"a",{"href":400},"/guides/puppeteer-pdf-in-production/",[402],{"type":21,"value":403},"Puppeteer PDF in production",{"type":21,"value":405},".",{"type":16,"tag":143,"props":407,"children":409},{"id":408},"puppeteer-vs-playwright-vs-gotenberg-vs-weasyprint-for-pdfs",[410],{"type":21,"value":411},"Puppeteer vs Playwright vs Gotenberg vs WeasyPrint for PDFs",{"type":16,"tag":17,"props":413,"children":414},{},[415,419,421,427,429,435],{"type":16,"tag":191,"props":416,"children":417},{},[418],{"type":21,"value":302},{"type":21,"value":420}," is the closest swap. It drives the same Chromium with the same ",{"type":16,"tag":381,"props":422,"children":424},{"className":423},[],[425],{"type":21,"value":426},"page.pdf()",{"type":21,"value":428}," call, and it's available for Node, Python, Java and .NET. It doesn't take the browser off your hands, though. In our test, 200 browser contexts left open grew the browser to 7,734 MB, the same memory leak under a new name. Our ",{"type":16,"tag":398,"props":430,"children":432},{"href":431},"/guides/playwright-pdf-in-production/",[433],{"type":21,"value":434},"Playwright PDF guide",{"type":21,"value":436}," covers the timeouts and cleanup it needs on a server.",{"type":16,"tag":17,"props":438,"children":439},{},[440,444,446,452],{"type":16,"tag":191,"props":441,"children":442},{},[443],{"type":21,"value":320},{"type":21,"value":445}," moves Chromium into a Docker container: you start it with ",{"type":16,"tag":381,"props":447,"children":449},{"className":448},[],[450],{"type":21,"value":451},"docker run --rm -p 3000:3000 gotenberg/gotenberg:9",{"type":21,"value":453}," and send files to it as multipart form data. Your app no longer has browser code in it, but the container is still a server you run, size and restart.",{"type":16,"tag":17,"props":455,"children":456},{},[457,461],{"type":16,"tag":191,"props":458,"children":459},{},[460],{"type":21,"value":337},{"type":21,"value":462}," isn't a browser. It's a Python library with its own CSS layout engine, so HTML built and tested in Chrome can lay out differently.",{"type":16,"tag":17,"props":464,"children":465},{},[466,470],{"type":16,"tag":191,"props":467,"children":468},{},[469],{"type":21,"value":354},{"type":21,"value":471},": don't start a new project on it. Its repo is read-only, so nothing in it gets fixed.",{"type":16,"tag":143,"props":473,"children":475},{"id":474},"switching-from-puppeteer-to-a-hosted-html-to-pdf-api",[476],{"type":21,"value":477},"Switching from Puppeteer to a hosted HTML to PDF API",{"type":16,"tag":17,"props":479,"children":480},{},[481],{"type":21,"value":482},"We've run Chromium for PDFShift customers since 2018. Here's the Puppeteer code you get to delete:",{"type":16,"tag":484,"props":485,"children":490},"pre",{"className":486,"code":488,"language":489,"meta":7},[487],"language-javascript","const page = await browser.newPage();\ntry {\n    await page.setContent(html, { waitUntil: 'load' });\n    return await page.pdf({\n        format: 'A4',\n        printBackground: true,\n        margin: { top: '40px', right: '40px', bottom: '40px', left: '40px' },\n    });\n} finally {\n    await page.close();\n}\n","javascript",[491],{"type":16,"tag":381,"props":492,"children":493},{"__ignoreMap":7},[494],{"type":21,"value":488},{"type":16,"tag":17,"props":496,"children":497},{},[498,500,508],{"type":21,"value":499},"And the same document from PDFShift's ",{"type":16,"tag":398,"props":501,"children":505},{"href":502,"rel":503},"https://docs.pdfshift.io/api-reference/convert-to-pdf",[504],"nofollow",[506],{"type":21,"value":507},"conversion API",{"type":21,"value":509},":",{"type":16,"tag":484,"props":511,"children":514},{"className":512,"code":513,"language":489,"meta":7},[487],"const response = await fetch('https://api.pdfshift.io/v3/convert/pdf', {\n    method: 'POST',\n    headers: {\n        'X-API-Key': process.env.PDFSHIFT_API_KEY,\n        'Content-Type': 'application/json',\n    },\n    body: JSON.stringify({\n        source: html, // raw HTML or a URL\n        format: 'A4',\n        margin: '40px', // all four sides\n        use_print: true, // print CSS, like page.pdf()\n    }),\n});\n\nif (!response.ok) {\n    throw new Error(`PDFShift returned ${response.status}: ${await response.text()}`);\n}\n\nconst pdf = Buffer.from(await response.arrayBuffer());\n",[515],{"type":16,"tag":381,"props":516,"children":517},{"__ignoreMap":7},[518],{"type":21,"value":513},{"type":16,"tag":17,"props":520,"children":521},{},[522],{"type":21,"value":523},"Three defaults differ, and each one changes the PDF if you don't set it:",{"type":16,"tag":24,"props":525,"children":526},{},[527],{"type":16,"tag":28,"props":528,"children":533},{"viewBox":529,"xmlns":31,"role":32,"ariaLabelledBy":530,"style":36,"fontFamily":37},"0 0 360 262",[531,532],"alt-defaults-title","alt-defaults-desc",[534,539,544,551,556,561,569,574,580,585,589,595,600,604,609,613,619,624,628],{"type":16,"tag":40,"props":535,"children":536},{"id":531},[537],{"type":21,"value":538},"Three defaults that change the PDF when you switch",{"type":16,"tag":46,"props":540,"children":541},{"id":532},[542],{"type":21,"value":543},"Puppeteer's default next to PDFShift's for three settings. Paper size: Letter in Puppeteer, A4 in PDFShift. Backgrounds: off in Puppeteer, on in PDFShift. Stylesheet: print in Puppeteer, screen in PDFShift.",{"type":16,"tag":21,"props":545,"children":548},{"x":546,"y":64,"textAnchor":137,"style":547,"fill":75},"132","font-size:13px;font-weight:600",[549],{"type":21,"value":550},"Puppeteer",{"type":16,"tag":21,"props":552,"children":554},{"x":553,"y":64,"textAnchor":137,"style":547,"fill":119},"272",[555],{"type":21,"value":195},{"type":16,"tag":52,"props":557,"children":560},{"style":54,"x":55,"y":558,"width":56,"height":559,"rx":58,"fill":59,"stroke":60},"33.5","66",[],{"type":16,"tag":21,"props":562,"children":566},{"x":563,"y":564,"style":565,"fill":67},"16","72","font-size:14px;font-weight:600",[567],{"type":21,"value":568},"Paper",{"type":16,"tag":21,"props":570,"children":571},{"x":546,"y":564,"textAnchor":137,"style":74,"fill":67},[572],{"type":21,"value":573},"Letter",{"type":16,"tag":21,"props":575,"children":577},{"x":576,"y":564,"textAnchor":137,"style":74,"fill":75},"202",[578],{"type":21,"value":579},"→",{"type":16,"tag":21,"props":581,"children":582},{"x":553,"y":564,"textAnchor":137,"style":565,"fill":119},[583],{"type":21,"value":584},"A4",{"type":16,"tag":52,"props":586,"children":588},{"style":54,"x":55,"y":587,"width":56,"height":559,"rx":58,"fill":59,"stroke":60},"111.5",[],{"type":16,"tag":21,"props":590,"children":592},{"x":563,"y":591,"style":565,"fill":67},"150",[593],{"type":21,"value":594},"Backgrounds",{"type":16,"tag":21,"props":596,"children":597},{"x":546,"y":591,"textAnchor":137,"style":74,"fill":67},[598],{"type":21,"value":599},"Off",{"type":16,"tag":21,"props":601,"children":602},{"x":576,"y":591,"textAnchor":137,"style":74,"fill":75},[603],{"type":21,"value":579},{"type":16,"tag":21,"props":605,"children":606},{"x":553,"y":591,"textAnchor":137,"style":565,"fill":119},[607],{"type":21,"value":608},"On",{"type":16,"tag":52,"props":610,"children":612},{"style":54,"x":55,"y":611,"width":56,"height":559,"rx":58,"fill":59,"stroke":60},"189.5",[],{"type":16,"tag":21,"props":614,"children":616},{"x":563,"y":615,"style":565,"fill":67},"228",[617],{"type":21,"value":618},"Stylesheet",{"type":16,"tag":21,"props":620,"children":621},{"x":546,"y":615,"textAnchor":137,"style":74,"fill":67},[622],{"type":21,"value":623},"Print",{"type":16,"tag":21,"props":625,"children":626},{"x":576,"y":615,"textAnchor":137,"style":74,"fill":75},[627],{"type":21,"value":579},{"type":16,"tag":21,"props":629,"children":630},{"x":553,"y":615,"textAnchor":137,"style":565,"fill":119},[631],{"type":21,"value":632},"Screen",{"type":16,"tag":634,"props":635,"children":636},"ul",{},[637,656,681],{"type":16,"tag":638,"props":639,"children":640},"li",{},[641,646,648,654],{"type":16,"tag":191,"props":642,"children":643},{},[644],{"type":21,"value":645},"Paper size.",{"type":21,"value":647}," Send ",{"type":16,"tag":381,"props":649,"children":651},{"className":650},[],[652],{"type":21,"value":653},"format: 'Letter'",{"type":21,"value":655}," to keep US paper.",{"type":16,"tag":638,"props":657,"children":658},{},[659,664,666,672,674,680],{"type":16,"tag":191,"props":660,"children":661},{},[662],{"type":21,"value":663},"Backgrounds.",{"type":21,"value":665}," They're on already. Send ",{"type":16,"tag":381,"props":667,"children":669},{"className":668},[],[670],{"type":21,"value":671},"disable_backgrounds: true",{"type":21,"value":673}," if you printed without ",{"type":16,"tag":381,"props":675,"children":677},{"className":676},[],[678],{"type":21,"value":679},"printBackground",{"type":21,"value":405},{"type":16,"tag":638,"props":682,"children":683},{},[684,689,690,696,698,703],{"type":16,"tag":191,"props":685,"children":686},{},[687],{"type":21,"value":688},"Stylesheet.",{"type":21,"value":647},{"type":16,"tag":381,"props":691,"children":693},{"className":692},[],[694],{"type":21,"value":695},"use_print: true",{"type":21,"value":697}," to render with your print CSS, the way ",{"type":16,"tag":381,"props":699,"children":701},{"className":700},[],[702],{"type":21,"value":426},{"type":21,"value":704}," does.",{"type":16,"tag":17,"props":706,"children":707},{},[708,710,716],{"type":21,"value":709},"To see your HTML at A4 width with its print CSS before you send it, paste it into our ",{"type":16,"tag":398,"props":711,"children":713},{"href":712},"/tools/html-viewer/",[714],{"type":21,"value":715},"free HTML viewer",{"type":21,"value":405},{"type":16,"tag":17,"props":718,"children":719},{},[720],{"type":21,"value":721},"The rest of the options map one to one:",{"type":21,"value":723},"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",{"type":16,"tag":152,"props":725,"children":726},{},[727,741],{"type":16,"tag":156,"props":728,"children":729},{},[730],{"type":16,"tag":160,"props":731,"children":732},{},[733,737],{"type":16,"tag":164,"props":734,"children":735},{},[736],{"type":21,"value":550},{"type":16,"tag":164,"props":738,"children":739},{},[740],{"type":21,"value":195},{"type":16,"tag":180,"props":742,"children":743},{},[744,775,795,824,845,869,950,973,996,1030],{"type":16,"tag":160,"props":745,"children":746},{},[747,764],{"type":16,"tag":187,"props":748,"children":749},{},[750,756,758],{"type":16,"tag":381,"props":751,"children":753},{"className":752},[],[754],{"type":21,"value":755},"page.setContent(html)",{"type":21,"value":757}," or ",{"type":16,"tag":381,"props":759,"children":761},{"className":760},[],[762],{"type":21,"value":763},"page.goto(url)",{"type":16,"tag":187,"props":765,"children":766},{},[767,773],{"type":16,"tag":381,"props":768,"children":770},{"className":769},[],[771],{"type":21,"value":772},"source",{"type":21,"value":774}," takes either",{"type":16,"tag":160,"props":776,"children":777},{},[778,787],{"type":16,"tag":187,"props":779,"children":780},{},[781],{"type":16,"tag":381,"props":782,"children":784},{"className":783},[],[785],{"type":21,"value":786},"landscape: true",{"type":16,"tag":187,"props":788,"children":789},{},[790],{"type":16,"tag":381,"props":791,"children":793},{"className":792},[],[794],{"type":21,"value":786},{"type":16,"tag":160,"props":796,"children":797},{},[798,807],{"type":16,"tag":187,"props":799,"children":800},{},[801],{"type":16,"tag":381,"props":802,"children":804},{"className":803},[],[805],{"type":21,"value":806},"margin: { top, right, bottom, left }",{"type":16,"tag":187,"props":808,"children":809},{},[810,816,818],{"type":16,"tag":381,"props":811,"children":813},{"className":812},[],[814],{"type":21,"value":815},"margin",{"type":21,"value":817}," as an object, or a CSS-style string such as ",{"type":16,"tag":381,"props":819,"children":821},{"className":820},[],[822],{"type":21,"value":823},"'40px 20px'",{"type":16,"tag":160,"props":825,"children":826},{},[827,836],{"type":16,"tag":187,"props":828,"children":829},{},[830],{"type":16,"tag":381,"props":831,"children":833},{"className":832},[],[834],{"type":21,"value":835},"pageRanges: '1-5'",{"type":16,"tag":187,"props":837,"children":838},{},[839],{"type":16,"tag":381,"props":840,"children":842},{"className":841},[],[843],{"type":21,"value":844},"pages: '1-5'",{"type":16,"tag":160,"props":846,"children":847},{},[848,859],{"type":16,"tag":187,"props":849,"children":850},{},[851,857],{"type":16,"tag":381,"props":852,"children":854},{"className":853},[],[855],{"type":21,"value":856},"scale",{"type":21,"value":858}," (0.1 to 2)",{"type":16,"tag":187,"props":860,"children":861},{},[862,868],{"type":16,"tag":381,"props":863,"children":865},{"className":864},[],[866],{"type":21,"value":867},"zoom",{"type":21,"value":858},{"type":16,"tag":160,"props":870,"children":871},{},[872,904],{"type":16,"tag":187,"props":873,"children":874},{},[875,881,883,889,891,897,898],{"type":16,"tag":381,"props":876,"children":878},{"className":877},[],[879],{"type":21,"value":880},"headerTemplate",{"type":21,"value":882}," and ",{"type":16,"tag":381,"props":884,"children":886},{"className":885},[],[887],{"type":21,"value":888},"footerTemplate",{"type":21,"value":890}," with ",{"type":16,"tag":381,"props":892,"children":894},{"className":893},[],[895],{"type":21,"value":896},"pageNumber",{"type":21,"value":882},{"type":16,"tag":381,"props":899,"children":901},{"className":900},[],[902],{"type":21,"value":903},"totalPages",{"type":16,"tag":187,"props":905,"children":906},{},[907,913,914,920,922,927,929,935,937,943,944],{"type":16,"tag":381,"props":908,"children":910},{"className":909},[],[911],{"type":21,"value":912},"header",{"type":21,"value":882},{"type":16,"tag":381,"props":915,"children":917},{"className":916},[],[918],{"type":21,"value":919},"footer",{"type":21,"value":921},", each with its own ",{"type":16,"tag":381,"props":923,"children":925},{"className":924},[],[926],{"type":21,"value":772},{"type":21,"value":928},", and ",{"type":16,"tag":381,"props":930,"children":932},{"className":931},[],[933],{"type":21,"value":934},"{{ page }}",{"type":21,"value":936},", ",{"type":16,"tag":381,"props":938,"children":940},{"className":939},[],[941],{"type":21,"value":942},"{{ total }}",{"type":21,"value":882},{"type":16,"tag":381,"props":945,"children":947},{"className":946},[],[948],{"type":21,"value":949},"{{ date }}",{"type":16,"tag":160,"props":951,"children":952},{},[953,962],{"type":16,"tag":187,"props":954,"children":955},{},[956],{"type":16,"tag":381,"props":957,"children":959},{"className":958},[],[960],{"type":21,"value":961},"page.goto(url, { waitUntil: 'networkidle0' })",{"type":16,"tag":187,"props":963,"children":964},{},[965,971],{"type":16,"tag":381,"props":966,"children":968},{"className":967},[],[969],{"type":21,"value":970},"wait_for_network",{"type":21,"value":972},", on by default: waits until no request has run for 500 ms",{"type":16,"tag":160,"props":974,"children":975},{},[976,985],{"type":16,"tag":187,"props":977,"children":978},{},[979],{"type":16,"tag":381,"props":980,"children":982},{"className":981},[],[983],{"type":21,"value":984},"page.waitForFunction(...)",{"type":16,"tag":187,"props":986,"children":987},{},[988,994],{"type":16,"tag":381,"props":989,"children":991},{"className":990},[],[992],{"type":21,"value":993},"wait_for",{"type":21,"value":995},": the name of a global function that returns true when the page is ready",{"type":16,"tag":160,"props":997,"children":998},{},[999,1015],{"type":16,"tag":187,"props":1000,"children":1001},{},[1002,1008,1009],{"type":16,"tag":381,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":21,"value":1007},"page.addStyleTag()",{"type":21,"value":936},{"type":16,"tag":381,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":21,"value":1014},"page.evaluate()",{"type":16,"tag":187,"props":1016,"children":1017},{},[1018,1024,1025],{"type":16,"tag":381,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":21,"value":1023},"css",{"type":21,"value":882},{"type":16,"tag":381,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":21,"value":489},{"type":16,"tag":160,"props":1031,"children":1032},{},[1033,1044],{"type":16,"tag":187,"props":1034,"children":1035},{},[1036,1042],{"type":16,"tag":381,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":21,"value":1041},"timeout",{"type":21,"value":1043}," in milliseconds",{"type":16,"tag":187,"props":1045,"children":1046},{},[1047,1052],{"type":16,"tag":381,"props":1048,"children":1050},{"className":1049},[],[1051],{"type":21,"value":1041},{"type":21,"value":1053}," in seconds",{"type":16,"tag":17,"props":1055,"children":1056},{},[1057,1059,1065],{"type":21,"value":1058},"PDFShift headers and footers don't inherit your page's CSS, so style them inline. While you compare output, send ",{"type":16,"tag":381,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":21,"value":1064},"sandbox: true",{"type":21,"value":1066},". Those documents are free and watermarked, up to 10 a minute.",{"type":16,"tag":17,"props":1068,"children":1069},{},[1070,1072,1078],{"type":21,"value":1071},"That's the whole migration. ",{"type":16,"tag":398,"props":1073,"children":1075},{"href":1074},"/register/",[1076],{"type":21,"value":1077},"Get a free API key",{"type":21,"value":1079}," and send it the HTML you print with Puppeteer today.",{"title":7,"searchDepth":1081,"depth":1081,"links":1082},2,[1083,1084,1085,1086],{"id":145,"depth":1081,"text":148},{"id":366,"depth":1081,"text":369},{"id":408,"depth":1081,"text":411},{"id":474,"depth":1081,"text":477},"markdown","content:alternatives:puppeteer.md","content","alternatives/puppeteer.md","md",1794330363692]