DEV Community

Evan
Evan

Posted on

Turning Markdown into PDFs using Puppeteer

Puppeteer is useful in many other contexts besides doing automated things on the web. It's particularly useful for generating PDFs. I want to highlight an NPM module / command line utility for turning Markdown into PDFs, Markdown to PDF. It leverages Puppeteer and Google Chrome.

What is Markdown?

Backing up a bit, Markdown is a light plain text markup language and text-to-HTML conversion tool. It's really useful for writers, in particularly, for developers.

Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML).

I love it because I take a plenty of notes in text files when attending talks, taking notes for meetings, for research, and more. It has a light and easy to learn formatting syntax that allows writers to easily make their writing look well. The thing I found most useful is the there's formatting for including code snippets, with syntax highlighting.

let message = 'Built in syntax highlighting is great';
Enter fullscreen mode Exit fullscreen mode

Markdown is pretty popular in the development community because of it's feature set and is a natively format for documentation on popular software repository hosting services, like GitHub and Bitbucket. For example, GitHub will appropriately render Markdown for files hosted on it's platform, like the readme file for Get-Me-The-Gif.

I love Markdown so much, that I use it as the content format for my website, EvanHalley.dev. I write all of my articles in Markdown, and using Hugo, convert all of my markdown to HTML that is then uploaded to the web. Dev.to also uses Markdown as their content source of choice.

Installing

npm install --global md-to-pdf
Enter fullscreen mode Exit fullscreen mode

Using Markdown to PDF

Markdown to PDF allows you to easily turn markdown files in PDFs. This is immediately useful if I wanted to send some developer documentation to a product manager via email, but want my Markdown to render correctly.

Usage on the Command Line

I want to convert the following Markdown to a PDF. I've saved it as shopping.md. The md extension denotes a markdown file.

# This is a markdown file

## Shopping List
* Macaroni noodles
* Sweet potatoes
* Pie crust
* Turkey
* Stuffing
* Collard greens

> "Don't forget the butter"
Enter fullscreen mode Exit fullscreen mode

I can use Markdown to PDF to convert this to a PDF.

md-to-pdf shopping.md shopping.pdf
Enter fullscreen mode Exit fullscreen mode

A screenshot of the generated PDF:

Screenshot of the generated PDF

Usage in a Nodejs App

const markdownToPdf = require('md-to-pdf');

(async () => {
    let pdf = await markdownToPdf('shopping.md', { dest: 'shopping.pdf' });
    console.log(pdf.filename);
})();
Enter fullscreen mode Exit fullscreen mode

The outcome of the the use is the same, however, it's very easily integrated into larger JavaScript applications. The example that immediately comes to mind is generating PDFs of all the documentation in a GitHub repository that can be distributed or uploaded elsewhere.

Thanks for reading! Reach out to me on Twitter if you have any questions.

If you like this article, please subscribe to my newsletter, The PuppetHero Digest, where I share articles just like this with you, sent directly to your email inbox!

Top comments (2)

Collapse
 
michael profile image
Michael Lee 🍕

Nice article Evan! Thanks for sharing about that package. I've personally used HTML-PDF a handful of times with pretty good control and outcome. Need to see if I can use md-to-pdf in my workflow as it seems more maintained.

By the way, shout out to a fellow triangle dev 🙌. I did CSC at NCSU. Cool to see more and more folks from the triangle show up on DEV 🙂

Collapse
 
evanhalley profile image
Evan

Thanks! I'm happy to see another State grad on Dev!