Take the 2-minute tour ×
Software Recommendations Stack Exchange is a question and answer site for people seeking specific software recommendations. It's 100% free, no registration required.

Almost every existing md to PDF goes through LaTeX: kramdown, pandoc, multimarkdown, etc.

Are there the options that don't, in any language, e.g. using a backend such as Prawn, libharu or jsPDF?

So far I have only found:

If you can convert the HTML subset generated from Markdown to PDF well, then that is a solution, but I am yet to find a software that does it properly. For example, PhantomJS conversions break markdown links <http://a.com>, which show as simple styled text on the PDF, not as clickable links that open on preferred browser, which are generated through LaTeX conversions.

O'Reilly Atlas is doing it for their HTMLBook (HTML5 subset), but they're not gonna open source that anytime soon.

Related: Ruby only SO question.

Why I want this: LaTeX is slow, produces horrible error messages, is hard to install, and is overly complex for the small subset needed for Markdown.

Partial solutions:

share|improve this question
Do you care what OS/Web-app? Also how about price? –  Nick Wilde Apr 25 '14 at 18:32
@NickWilde The freer the better, the more cross the better. Linux support would make me happy. But I wanna hear all options =) –  Ciro Santilli 六四事件 法轮功 Apr 25 '14 at 18:45
Oh and forgot to ask what kind of interface do you want - CLI or GUI. If CLI I have an option that I'm pretty sure doesn't use LaTex. –  Nick Wilde Apr 25 '14 at 19:14
@NickWilde I prefer CLI, but once again, I want to know all of them. –  Ciro Santilli 六四事件 法轮功 Apr 25 '14 at 19:19
prefer CLI well then that is great :D... answer coming right up. –  Nick Wilde Apr 25 '14 at 19:23

4 Answers 4

up vote 6 down vote accepted

Node.js Package Markdown-PDF should work well. I have been using the Grunt package of that, but just for the sake of a good answer I just quickly ran the the original via the command line; and yeap it works great.

So to use the CLI of Markdown-PDF just:

  1. Install Node.js (if necessary)
  2. Install Markdown-PDF - from cmdline just run npm install -g markdown-pdf
  3. run markdown-pdf -o readme.pdf readme.md (or whatever source and destination and other options you want; see CLI Options for all the details of what you can specify).

It is Open-Source (MIT licenced), and has a Github repo, it is free and as far as I've found it is is quite fast.

There may be a slight problem with getting images from https:// domains but I haven't investigated what is up there - one of my images is not being loaded so this is most likely just something funny in my md but there is a slight chance that is a bug.

One significant bug: clickable links are not created.

share|improve this answer
Backend: to HTML using Marked, then PhantomJS. @NickWilde: do your <http://a.com> links survive in the PDF? I get images only. Not sure if this is possible with PhantomJS. –  Ciro Santilli 六四事件 法轮功 Apr 25 '14 at 19:48
hmm... I don't have any <link> type links - just [name](link) or [name][id] type linkes and they work. They both have the link text after the link which isn't pretty but probably could be fixed with a minor adjustment - I was forgetting to mention that. –  Nick Wilde Apr 25 '14 at 19:59
Can you click on the link once, and it opens on the browser? Which PDF viewer are you using? For Evince and Okular I only get plain styled text. I have tested and same for [](), the text appears on the right, which is a good design since they links are not clickable (for me). –  Ciro Santilli 六四事件 法轮功 Apr 25 '14 at 20:08
I'm on Windows (7)/Adobe Acrobat (XI) - the title is not clickable the link text is (and one click opens in preferred browser (after Adobe security warning about opening links). To me that is minor however I can see that could be a breaking issue for some use cases. –  Nick Wilde Apr 25 '14 at 20:13
I'll see if I can fix that later –  Nick Wilde Apr 25 '14 at 20:17

I've investigated another option. Compared to Markdown-PDF:

  • Pros:
    • Actually makes proper links.
    • Actually slightly quicker to run
  • Cons:
    • Not as "pretty" - except for the links everything looks nicer with Markdown-PDF. This would be easily fixable by adding some CSS to the HTML before PDF generation though*.
    • Installation is more complicated.

This is also a Nodejs based solution which uses the Marked and wkhtmltopdf node packages.


  • Install Nodejs.
  • Install Marked - easiest via commandline: npm -g install marked
  • Install wkhtmltopdf NPM - easiest via commandline: npm -g install wkhtmltopdf
  • Install wkhtmltopdf main files - no installer available.
  • Add wkhtmltopdf bin directory to the PATH


To use takes two CLI calls. You can of course just save this as a batch file and run that.

marked input.md -o output.html
wkhtmltopdf input.html output.pdf

* Because of the links working I may switch to this method instead of Markdown-PDF in which case I'll likely write a wrapper to add some CSS (with an option to add a sensible default or user defined). The wrapper would also make it one call instead of two for running and probably could make it one npm install cmd instead of the manual install. If/when I do that I'll share that here.

share|improve this answer
The following is based on top of wkhtmltopdf: github.com/pdfkit/pdfkit. Haven't tried, but I am yet to understand what it does that wkhtmltopdf does not. –  Ciro Santilli 六四事件 法轮功 Apr 26 '14 at 6:00
Looks like that is a ruby wrapper for wkhtmltopdf –  Nick Wilde Apr 26 '14 at 6:04
I haven't tried it so I can't review how well it works, but this does not do very well on the installability side: the repo is 1Gb, and including a 0.5 Gb Qt fork! –  Ciro Santilli 六四事件 法轮功 Apr 27 '14 at 6:10
Er I'm guessing that must be for PDFKit rather than my recommendation - because my recommendation has a total download size of well under 30mb - ~6mb Nodejs, ~16mb wkhtmltopdf and then the wrappers which are relatively small (node-wkhtmltopdf is 2.8kb). –  Nick Wilde Apr 27 '14 at 6:40
Ah, I was talking about the wkhtmltopdf repository, but maybe they include tons of things which are not installed. Thanks. –  Ciro Santilli 六四事件 法轮功 Apr 27 '14 at 7:00

To build on @nick-wilde's solution, if you are using grunt there are plugins for both marked and wkhtmltopdf:

After installing the main wkhtmltopdf binary you can then install the plugins using npm:

npm install grunt-marked --save-dev
npm install grunt-wkhtmltopdf --save-dev

Then use something like this in your Gruntfile.js:

marked: {
  std : {
    files: {
      'out.html' : ['src.md']

wkhtmltopdf: {
  std : {
    src: 'out.html',
    dest: 'out.pdf'

Then in your build you just call the two in succession:

grunt.registerTask('build', ['marked', 'wkhtmltopdf']);

If you want it to look pretty, you'll have to fiddle more with the marked settings, but I'm sure it's doable.

share|improve this answer

Not an automatic way, but…

Markdown is easily converted to HTML, and then, you can convert from HTML to PDF in Safari browser: (in menu) File -> Export as PDF… screenshot

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.