We started DocRaptor in 2010 because we couldn't find any high-quality HTML to PDF conversion libraries. While the quality of open-source PDF generators has improved over time, we still believe DocRaptor is the easiest and most powerful Node.js HTML to PDF option. That doesn't mean we're the best fit for every Node.js PDF conversion project though.
We haven't tried all these libraries in a production environment, so please do further testing and evaluation on your document—but we believe our shared PDF knowledge provides useful insight.
The jsPDF documentation is entirely focused on the method definitions and lacks tutorials for using these methods. While there are helpful guides available elsewhere and many StackOverflow answers, we found the learning curve to be steep.
Our recommendation would be to avoid using jsPDF for HTML to PDF conversion, and instead only use jsPDF as a PDF generator. Even then, something as simple and common as adding page numbers involves looping through all the pages and inserting a page number element on each page. Most HTML to PDF generators solve this with a single CSS property like
content: "Page " counter(page, upper-alpha) " of " counter(pages, decimal);.
In addition to having excellent documentation and overall PDF creation capabilities, PDF-LIB also supports PDF editing—which is a relatively rare functionality. It supports forms, but misses other common features such as SVG images (you can draw SVG paths) or headers and footers.
PDFMake is actually based on PDFKit. However, unlike PDfKit's imperative approach, PDFMake uses a JSON-based declarative style. This removes a lot of flexibility, but PDFMake offers theoretically greater functionality. For example, PDFMake supports tables, headers/footers, watermarks, and columns—none of which are directly supported by PDFKit.
Unfortunately, the declarative approach severely limits PDFMake's capabilities for creating complex or graphically oriented PDFs. Each element is placed directly after the previous element, with no ability for overlapping elements or positioned elements. This is demonstrated by the PDFMake example documents. We would only recommend it for the most simple, text-based documents.
In addition to DocRaptor, there are many other online HTML to PDF APIs and they frequently have Node.js or JavaScrap wrappers. All the other APIs use open-source PDF generators, typically Puppeteer or occasionally the dated wkhtmltopdf or PhantomJS libraries.
Like DocRaptor, these APIs will relieve your infrastructure and management burdens, but they'll suffer from the same downsides as the open-source libraries themselves and struggle with more complex PDF documents. They're best for simpler documents. We'd recommend comparing the customers, uptime guarantees, and samples documents of the various APIs.
In our experience, the complexity of your desired document is the primary factor in your library choice. For HTML to PDF converters, complexity increases when the number of non-web-page elements increases. For example:
As browsers are not designed to render these document-level and page-level elements, many HTML to PDF generators struggle with implementing these concepts, and many ignore them altogether. If your document contains such elements, the more testing you'll need to conduct (and the more likely you'll need a commercial solution, such as DocRaptor).