
Product
Socket for Jira Is Now Available
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.
jspdf-html2canvas
Advanced tools
A combine usage with jsPDF and html2canvas, which translating html content to PDF file.
A combine usage with jsPDF & html2canvas-pro, which translating html content to PDF file. Written in Typescript.
html2PDF function will auto fit the target dom width into PDF size. So no need to worry about the overflow part. And if the content height is over 1 pdf, it'll auto seperate it into another pdf page.
Note: This package now uses
html2canvas-proinstead of the originalhtml2canvasfor better performance and additional features.(version above v1.6.0)
npm i jspdf-html2canvas
import html2PDF from 'jspdf-html2canvas';
html2PDF(node, options);
since this plugin is an umd module, you can also use by cdn with /dist/jspdf-html2canvas.min.js, just remember to include both jspdf & html2canvas-pro cdn before this plugin.
<script src="https://unpkg.com/jspdf@latest/dist/jspdf.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/html2canvas-pro@latest/dist/html2canvas-pro.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jspdf-html2canvas@latest/dist/jspdf-html2canvas.min.js"></script>
convert specific DOM target to print it into PDF file.
Automatically, it'll save the file, or you can define the success callback to do with the jsPDF instance.
<!-- default a4's width is 595.28px -->
<div id="page" style="width: 595.28px;color: black;background: white;">
<h3>PDF for Test</h3>
<p>Here is some content for testing!!</p>
</div>
<button id="btn">Generate</button>
let btn = document.getElementById('btn');
let page = document.getElementById('page');
btn.addEventListener('click', function(){
html2PDF(page, {
jsPDF: {
format: 'a4',
},
imageType: 'image/jpeg',
output: './pdf/generate.pdf'
});
});
you can easily await the method to wait for pdf generated.
async function printPdf() {
const pdf = await html2PDF(page, {
// ...
});
// do something with pdf(jsPdf instance)
}
If there's some white space on top of the outputed PDF file, it might caused by the scroll problem, just add some settings for
html2canvas-proplugin as following. see the reference
html2PDF(page, {
// ... other settings
html2canvas: {
scrollX: 0,
scrollY: -window.scrollY,
},
});
There might be some situation you want to print DOM seperately, just easily give the nodeList with length in it, will adjust every nodes inside seperately into a new page in the same PDF output.
for example:
<div id="page" style="width: 595.28px;color: black;background: white;">
<div class="page page-1">
<h3>Test page 1</h3>
<p>This is an page for testing 1</p>
</div>
<div class="page page-2">
<h3>Test page 2</h3>
<p>This is an page for testing 1</p>
</div>
<div class="page page-3">
<h3>Test page 3</h3>
<p>This is an page for testing 1</p>
</div>
</div>
const pages = document.getElementsByClassName('page');
btn.addEventListener('click', function(){
html2PDF(pages, {
jsPDF: {
format: 'a4',
},
imageType: 'image/jpeg',
output: './pdf/generate.pdf'
});
});
Object{
unit: 'pt',
format: 'a4'
}
setting for creating jsPDF's instance, please ref to JSPDF Documentation
Object{
imageTimeout: 15000,
logging: true,
useCORS: false
}
setting for html2canvas-pro configs, please ref to html2canvas-pro Documentation
String | Function | Objectsetting for watermark in pdf, will add watermark into each pages of your outputed pdf file.
each data type has different usage as following:
String => image urlcreate image watermark in the center of each page with default image scale size 1, please use .png file for watermark.
html2PDF(page, {
watermark: './test.png',
});
Function => custom handlerdefine custom handler to do things for each page of pdf file.
html2PDF(page, {
watermark({ pdf, pageNumber, totalPageNumber }) {
// pdf: jsPDF instance
pdf.setTextColor('#ddd');
pdf.text(50, pdf.internal.pageSize.height - 30, `Watermark, page: ${pageNumber}/${totalPageNumber}`);
},
});
Object => custom handler or resize image watermarkdefine image watermark with change ratio, or use custom handler to do with the image position.
html2PDF(page, {
watermark: {
src: './test.png',
scale: 0.5
},
});
// or
html2PDF(page, {
watermark: {
src: './test.png',
handler({ pdf, imgNode, pageNumber, totalPageNumber }) {
const props = pdf.getImageProperties(imgNode);
// do something...
pdf.addImage(imgNode, 'PNG', 0, 0, 40, 40);
},
},
});
Stringimage/jpeg, image/png, image/webpimage/jpegdefine the target imageType, now only support for jpeg, png, webp
// will be used like
let pageData = canvas.toDataURL(opts.imageType, opts.imageQuality);
Number0 - 11define the image quality transfered from canvas
Object{key => number}top, right, bottom, left0define the margin of each page
Booleantruedefine whether to auto resize the snapshot image to fit PDF layout size
Stringjspdf-generate.pdfdefine name of the output PDF file
pdf.save(opts.output);
Functionfunction init(pdf) {
pdf.setFont('Myfont');
pdf.setFontSize(10);
}
define some init for jspdf initiating before printing
Functionfunction success(pdf) {
pdf.save(this.output);
}
callback function to do after all code, default will save the file with the output name setting.
const defaultOptions = {
jsPDF: {
unit: 'pt',
format: 'a4',
},
html2canvas: {
imageTimeout: 15000,
logging: true,
useCORS: false,
},
imageType: 'image/jpeg',
imageQuality: 1,
margin: {
top: 0,
right: 0,
bottom: 0,
left: 0,
},
watermark: undefined,
autoResize: true,
output: 'jspdf-generate.pdf',
init: function() {},
success: function(pdf) {
pdf.save(this.output);
}
}
if you want more custom & widing solutions, you can use this npm package
FAQs
A combine usage with jsPDF and html2canvas, which translating html content to PDF file.
The npm package jspdf-html2canvas receives a total of 37,499 weekly downloads. As such, jspdf-html2canvas popularity was classified as popular.
We found that jspdf-html2canvas demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.