Generate a PDF from HTML with Vue.js using html2pdf.js

Generate a PDF from HTML with Vue.js using html2pdf.js
TL;DR

This tutorial compares three HTML-to-PDF libraries for Vue.js: html2pdf.js (simple setup for existing HTML), jsPDF (flexible programmatic creation), and pdfmake (advanced layouts with detailed formatting). Choose based on your needs: html2pdf.js for ease, jsPDF for dynamic content, or pdfmake for complex structure.

Generating a PDF from HTML is a common requirement in modern web applications. With Vue.js, you can efficiently create and customize PDF documents using libraries like html2pdf.js(opens in a new tab). In this post, we’ll show you how to leverage html2pdf.js to generate PDFs from Vue components, covering essential steps and options for a smooth implementation.

If you prefer a video tutorial, you can watch our step-by-step guide.

Prerequisites

This post assumes you’re familiar with Vue.js(opens in a new tab). If you aren’t, first read through the Vue.js guides(opens in a new tab).

Start by creating a boilerplate Vue.js project(opens in a new tab) using npm create vue@latest. This command will install and launch create-vue, the official tool for setting up Vue projects. You’ll be prompted to select various optional features, such as TypeScript and testing support. Refer to the list below for guidance.

  • Project name: … <your-project-name>
  • Add TypeScript? … No / Yes — Select No.
  • Add JSX Support? … No / Yes — Select Yes.
  • Add Vue Router for Single Page Application development? … No / Yes — Select No.
  • Add Pinia for state management? … No / Yes — Select No.
  • Add Vitest for Unit testing? … No / Yes — Select No.
  • Add an End-to-End Testing Solution? … No / Cypress / Nightwatch / Playwright — Select No.
  • Add ESLint for code quality? … No / Yes — Select No.
  • Add Prettier for code formatting? … No / Yes — Select Yes.
  • Add Vue DevTools 7 extension for debugging? (experimental) … No / Yes — Select No.

Once your project is set up, install html2pdf.js with:

Terminal window
npm install html2pdf.js

The creator of html2pdf.js suggests(opens in a new tab) using v0.9.3. We used the latest version and didn’t have a problem, but if you encounter problems in your project, downgrading might be the answer.

Generating a PDF from HTML with html2pdf.js

This post shows how to convert an img element to PDF. Add the correct URL or file path to the string placeholder used in the src tag of the img element.

  1. Setting up your Vue component

Update your App.vue file to include an element for conversion and a button to trigger the PDF generation:

<template>
<div id="app" ref="document">
<div id="element-to-convert">
<center>
<img width="400" src="./path-or-url" />
</center>
</div>
</div>
<button @click="exportToPDF">Export to PDF</button>
</template>
<style>
#app {
margin-top: 60px;
}
</style>

It will look like what’s shown below.

<center> Browser screenshot </center>

  1. Adding PDF generation logic

In the App.vue script section, import html2pdf and define the exportToPDF method:

<script>
import html2pdf from "html2pdf.js";
export default {
name: "App",
methods: {
exportToPDF() {
html2pdf(document.getElementById("element-to-convert"), {
margin: 1,
filename: "generated-pdf.pdf",
});
},
},
};
</script>

The exportToPDF function takes a second parameter, an object, which allows you to configure some options that control how the PDF will look. The available options are margin, filename, pagebreak, image, enableLinks, html2canvas, and jsPDF. You can read more about them here(opens in a new tab).

For this example, you’ll use a couple of them:

exportToPDF() {
html2pdf(document.getElementById("element-to-convert"), {
margin: 1,
filename: "generated-pdf.pdf",
});
},

The full solution

Here’s how the App.vuejs file will look after your changes:

<template>
<div id="app" ref="document">
<div id="element-to-convert">
<center>
<img width="400" src="./path-or-url" />
</center>
</div>
<button @click="exportToPDF">Export to PDF</button>
</div>
</template>
<script>
import html2pdf from "html2pdf.js";
export default {
name: "App",
methods: {
exportToPDF() {
html2pdf(document.getElementById("element-to-convert"), {
margin: 1,
filename: "generated-pdf.pdf",
});
},
},
};
</script>
<style>
#app {
margin-top: 60px;
text-align: center;
}
</style>

Run your Vue.js project with npm run serve. The result is a website with an image and an Export to PDF button that converts the image to PDF when pressed.

Alternative libraries for PDF generation in Vue.js

While html2pdf.js is a popular choice for converting HTML to PDF in Vue.js projects, there are several other libraries that may better suit your needs, depending on your specific requirements. Below is a comparison of some Vue.js-compatible libraries that you can consider.

Comparison of Vue.js-compatible libraries for HTML-to-PDF conversion

LibraryKey featuresEase of useCustomization optionsDocumentation
html2pdf.jsSimple integration, converts HTML directly to PDFEasyLimitedGood
jsPDFProgrammatic PDF creation, supports tables and imagesModerateHighExtensive
pdfmakeCustom PDF layout, supports complex content structuresModerateHighGood

Library overviews

  1. html2pdf.js: This library is ideal for straightforward use cases where you need to convert existing HTML to PDF with minimal setup. It’s easy to integrate into Vue.js projects and offers a simple API for basic PDF generation needs.

  2. jsPDF(opens in a new tab): If you need more control over the structure and content of your PDFs, jsPDF might be the better option. It allows for programmatic creation of PDFs, supporting tables, images, and other advanced features. This library is suitable for projects where you need to generate PDFs dynamically based on user input or other data.

  3. pdfmake(opens in a new tab): pdfmake is a powerful library that supports complex content structures and custom PDF layouts. It’s well-suited for applications where you need to create highly customized PDFs with detailed formatting. While it requires a bit more effort to set up, it offers extensive customization options.

Integration of jsPDF in Vue.js

  1. Install jsPDF
Terminal window
npm install jspdf
  1. Import and use it in your Vue component

Create an instance of jsPDF and use its methods to add content and customize your PDF document. For example, you can add text to the PDF and then save it:

import jsPDF from 'jspdf';
const doc = new jsPDF();
// Add text to the PDF.
doc.text('Hello world!', 10, 10);
// Save the PDF.
doc.save('document.pdf');

Here’s a complete example of using jsPDF in a Vue component to generate and download a PDF:

<template>
<div>
<button @click="generatePDF">Generate PDF</button>
</div>
</template>
<script>
import jsPDF from 'jspdf';
export default {
name: 'PDFGenerator',
methods: {
generatePDF() {
// Create a new jsPDF instance.
const doc = new jsPDF();
// Add text to the PDF.
doc.text("Hello world!", 10, 10);
// Save the PDF with a filename.
doc.save("document.pdf");
},
},
};
</script>

Integration of pdfmake in Vue.js

To use pdfmake for generating PDFs in your project, you’ll need to follow the steps below to integrate and use the library.

  1. Install pdfmake in your project
Terminal window
npm install pdfmake
  1. Import pdfmake and fonts
import pdfMake from 'pdfmake/build/pdfmake';
import pdfFonts from 'pdfmake/build/vfs_fonts';
// Set the fonts for pdfMake.
pdfMake.vfs = pdfFonts.pdfMake.vfs;
  1. Define the document content

Create a document definition object that specifies the content and layout of your PDF:

const docDefinition = { content: 'This is a sample PDF' };
  1. Generate and download the PDF

Use the createPdf method from pdfMake to generate and download the PDF:

pdfMake.createPdf(docDefinition).download('sample.pdf');

Here’s a complete example of how to use pdfmake in a Vue component:

<template>
<div>
<button @click="generatePDF">Generate PDF</button>
</div>
</template>
<script>
import pdfMake from 'pdfmake/build/pdfmake';
import pdfFonts from 'pdfmake/build/vfs_fonts';
// Set the fonts for pdfMake.
pdfMake.vfs = pdfFonts.pdfMake.vfs;
export default {
name: 'PDFGenerator',
methods: {
generatePDF() {
const docDefinition = {
content: 'This is a sample PDF',
};
pdfMake.createPdf(docDefinition).download('sample.pdf');
},
},
};
</script>

Conclusion

html2pdf.js(opens in a new tab) enables us to generate PDFs from HTML quickly and seamlessly. It’s a great choice for building simple applications that generate PDF documents. In this post, you saw how it’s possible to achieve this goal with a few lines of code.

If you have — or predict having — more complex workflows and needs, Nutrient can help. For example, if you’re interested in automating the PDF generation process, refer to our PDF generator API, which enables you to generate PDF files from HTML templates. You can style the CSS, add unique images and fonts, and persist your headers and footers across multiple pages.

If you’re also interested in displaying PDFs in a powerful and customizable viewer that provides a number of advanced functionalities like annotating PDFs or digitally signing them, we recommend checking out Document Engine.

For more information on converting and generating PDFs, check out our related blog posts:

FAQ

How can I generate a PDF in a Vue.js application?

You can generate a PDF in a Vue.js application using libraries like html2pdf.js, jsPDF(opens in a new tab), or pdfmake(opens in a new tab). These libraries help convert HTML content to PDF format within a Vue component.

What are the steps to install html2pdf in a Vue.js project?

Install html2pdf using npm with the command npm install html2pdf.js. Then import and use it in your Vue components to capture and convert HTML content to PDF.

How does pdfmake differ from html2pdf in Vue.js applications?

pdfmake offers more control over PDF layout and content, allowing for programmatically generated PDFs with complex structures, whereas html2pdf is easier to use for converting existing HTML content to PDF.

Can I generate PDFs from dynamic content in Vue.js?

Yes, you can generate PDFs from dynamic content by binding data to your Vue components and using libraries like html2pdf.js to capture the rendered HTML for conversion to PDF.

Veronica Marini

Veronica Marini

Web Engineer

Veronica’s passion for puzzles got her into programming. She likes everything frontend, bringing design to life, and measuring herself with coding. She also collects hobbies: from yoga to surfing to playing Brazilian drums.

Hulya Masharipov

Hulya Masharipov

Technical Writer

Hulya is a frontend web developer and technical writer at Nutrient who enjoys creating responsive, scalable, and maintainable web experiences. She’s passionate about open source, web accessibility, cybersecurity privacy, and blockchain.

Explore related topics

FREE TRIAL Ready to get started?