realdennis/md2pdf

Offline markdown to pdf, choose -> edit -> transform 🥂

JavaScript

1,841

90 commits

updated Jan 21, 2026

See the code

README

Deploy gh-pages

Markdown2PDF

English | 简体中文(Simplified Chinese) | 繁體中文(Traditional Chinese)
https://realdennis.github.io/md2pdf/

It just works!

Upload

Awesome Markdown to PDF!

- Online? Upload resume.md to stranger server?
+ Try Offline Web App!

How to use md2pdf?

  1. Click button choose .md file.
  2. Edit in editor (left panel).
  3. Click Transform!
  4. Switch 'Destination' to Save as PDF.
  5. Chrome recommended

Using Docker

  1. Install docker on your platform
  2. Clone the repository
  3. cd into md2pdf
  4. Run docker compose up -d inside the directory

The docker compose binds the web server to localhost:8080 by default. You can change this by finding the ports line in docker-compose.yaml.

Note: This docker compose uses the build directive, so your system will go build and optimize the code itself. The application is hosted locally through nginx which is what binds to port 8080.

Tips

  • Resize the layout what you want.
  • After click Transform button, inverse the checkbox of 'Headers and Footers'.
  • 反選頁首與頁尾.

What's special?

  • You can use html tag!
Hey I'm in blockquote!

LICENSE MIT © 2019 realdennis

codemirror
markdown
nonaction
pdf
react
remarkable

realdennis/md2pdf

Offline markdown to pdf, choose -> edit -> transform 🥂

JavaScript

1,841

90 commits

updated Jan 21, 2026

See the code

README

Deploy gh-pages

Markdown2PDF

English | 简体中文(Simplified Chinese) | 繁體中文(Traditional Chinese)
https://realdennis.github.io/md2pdf/

It just works!

Upload

Awesome Markdown to PDF!

- Online? Upload resume.md to stranger server?
+ Try Offline Web App!

How to use md2pdf?

  1. Click button choose .md file.
  2. Edit in editor (left panel).
  3. Click Transform!
  4. Switch 'Destination' to Save as PDF.
  5. Chrome recommended

Using Docker

  1. Install docker on your platform
  2. Clone the repository
  3. cd into md2pdf
  4. Run docker compose up -d inside the directory

The docker compose binds the web server to localhost:8080 by default. You can change this by finding the ports line in docker-compose.yaml.

Note: This docker compose uses the build directive, so your system will go build and optimize the code itself. The application is hosted locally through nginx which is what binds to port 8080.

Tips

  • Resize the layout what you want.
  • After click Transform button, inverse the checkbox of 'Headers and Footers'.
  • 反選頁首與頁尾.

What's special?

  • You can use html tag!
Hey I'm in blockquote!

LICENSE MIT © 2019 realdennis

codemirror
markdown
nonaction
pdf
react
remarkable

Significant stargazers

Greg Weber

228 followers · starred Mar 2019

miguel

1,973 followers · starred Apr 2025

doujiang24

401 followers · starred Dec 2019

Asabeneh

21,894 followers · starred Jan 2026