Home Web Front-end JS Tutorial Use puppeteer with Node to create PDFs!

Use puppeteer with Node to create PDFs!

Dec 27, 2024 pm 12:25 PM

How to Create a PDF Generator Using Puppeteer and Node.js

Use puppeteer with Node to create PDFs!

Generating dynamic PDFs is a common requirement in web development. Whether it's for invoices, reports, or resumes, creating a robust PDF generator is an essential skill for developers. In this article, I'll walk you through building a PDF generator using Node.js and Puppeteer, a powerful headless browser library.

As an example, I used this same method to build my CV Maker Project, which takes user input and dynamically generates a PDF. You can see the live demo of the project here: Live Demo.

This guide is written in plain, beginner-friendly language. If any part feels unclear, feel free to leave a comment, and I’ll address it as soon as possible.


Prerequisites

Before we begin, ensure you have the following:

  • Node.js installed on your machine.
  • A basic Node.js project skeleton set up.
  • Puppeteer installed as a dependency in your project:
  npm install puppeteer
Copy after login
Copy after login

If you’d like to reference the complete source code for this tutorial, check out my GitHub repository.


Step 1: Create a POST Endpoint for Receiving Data

First, create an endpoint where the client can send data to generate a PDF. For this, we’ll define a simple POST route in our index.js (or equivalent main server file).

app.post("/data", async (req: Request, res: Response) => {
    let postData = req.body.data; // Storing the data sent from the client
});
Copy after login
Copy after login

This endpoint will receive the data that needs to be included in the PDF.


Step 2: Create a Controller File

To keep the code organized, create a folder named controllers in your project directory. Inside this folder, create a file named PdfController.js.

The controller file is where we’ll write the logic for generating the PDF. This keeps our code modular and makes it easier to maintain.


Step 3: Write Logic for PDF Generation

In PdfController.js, add the following code to generate a PDF using Puppeteer:

export default (async function (postData) {
    try {
        const browser = await puppeteer.launch({
            headless: true,
            args: ["--no-sandbox", "--disable-gpu"],
        });

        const page = await browser.newPage();
        const content = `<html><body><h1>${postData}</h1></body></html>`;

        await page.setContent(content);
        await page.emulateMediaType('screen');
        await page.pdf({
            path: 'resume.pdf',
            format: 'A4',
            printBackground: true,
        });

        console.log('PDF created');
        await browser.close();
    } catch (err) {
        console.error('Error:', err);
    }
});
Copy after login

Here’s what this code does:

  1. Launches a Puppeteer browser instance in headless mode.
  2. Opens a new page and sets the content using the data provided by the user.
  3. Converts the page content into a PDF and saves it as resume.pdf.
  4. Closes the browser to free up resources.

Step 4: Use the PdfController Function in the POST Endpoint

Now, connect the PdfController function to the POST endpoint in index.js:

import PdfController from "./controllers/controller.js";

app.post("/data", async (req: Request, res: Response) => {
    let postData = req.body.data; // Storing the data sent from the client
    await PdfController(postData);
});
Copy after login

This ensures that whenever the /data endpoint is called, the logic for generating the PDF will be executed.


Step 5: Verify the PDF Generation

At this point, you can test the endpoint using Postman or any other HTTP client. When you send a POST request with the relevant text data, a PDF named resume.pdf will be created in the project’s root directory.


Step 6: Send the PDF Back to the Client

To send the generated PDF back to the client as a response, install the fs-extra package:

  npm install puppeteer
Copy after login
Copy after login

Then update the POST endpoint as follows:

app.post("/data", async (req: Request, res: Response) => {
    let postData = req.body.data; // Storing the data sent from the client
});
Copy after login
Copy after login

This code sends the resume.pdf file as a downloadable attachment to the client.


Conclusion

Use puppeteer with Node to create PDFs!

And that’s it! ? You’ve built a complete PDF generator using Node.js and Puppeteer. This setup dynamically generates PDFs based on user input and sends them back as downloadable files.

Here’s what you achieved:

  • Set up a Node.js server with a POST endpoint.
  • Used Puppeteer to generate PDFs dynamically.
  • Sent the generated PDF back to the client.

Bonus

If you’d like to generate well-structured and formatted PDFs (e.g., resumes or invoices with tables and styles), let me know in the comments. I’d love to write another tutorial for advanced use cases.

Also, feel free to check out the complete project code. It’s well-documented and beginner-friendly.

Have a nice day!

The above is the detailed content of Use puppeteer with Node to create PDFs!. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What should I do if I encounter garbled code printing for front-end thermal paper receipts? What should I do if I encounter garbled code printing for front-end thermal paper receipts? Apr 04, 2025 pm 02:42 PM

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

Who gets paid more Python or JavaScript? Who gets paid more Python or JavaScript? Apr 04, 2025 am 12:09 AM

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

Demystifying JavaScript: What It Does and Why It Matters Demystifying JavaScript: What It Does and Why It Matters Apr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

How to merge array elements with the same ID into one object using JavaScript? How to merge array elements with the same ID into one object using JavaScript? Apr 04, 2025 pm 05:09 PM

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

How to achieve parallax scrolling and element animation effects, like Shiseido's official website?
or:
How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? How to achieve parallax scrolling and element animation effects, like Shiseido's official website? or: How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? Apr 04, 2025 pm 05:36 PM

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

Is JavaScript hard to learn? Is JavaScript hard to learn? Apr 03, 2025 am 12:20 AM

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

The difference in console.log output result: Why are the two calls different? The difference in console.log output result: Why are the two calls different? Apr 04, 2025 pm 05:12 PM

In-depth discussion of the root causes of the difference in console.log output. This article will analyze the differences in the output results of console.log function in a piece of code and explain the reasons behind it. �...

How to implement panel drag and drop adjustment function similar to VSCode in front-end development? How to implement panel drag and drop adjustment function similar to VSCode in front-end development? Apr 04, 2025 pm 02:06 PM

Explore the implementation of panel drag and drop adjustment function similar to VSCode in the front-end. In front-end development, how to implement VSCode similar to VSCode...

See all articles