MultiMarkdown Converter Pro
Markdown Implementations
Either direct or other lists
Pro Effortless math input The whole reason that TeX - and, by extension, LaTeX - exists is to give people an easy way (well, for some value of 'easy') to produce high-quality documents with properly laid out mathematical expressions and text in them. MultiMarkdown as: 1.A program to convert plain text to a fully formatted document. 2.The syntax used in the plain text to describe how to convert it to a complete document. Why should I use MultiMarkdown? Writing with MultiMarkdown allows you to separate the content and structure of your document from the formatting. You focus on the. MultiMarkdown Composer Is My Markdown Based Text Editor. Product: MultiMarkdown Composer v4 Price: Free, Standard Edition: $14.99, Pro Edition $29.99. In the crowded field of Markdown based text editors, MultiMarkdown Composer (Composer) is a differentiated beast. For one, it is based on MultiMarkdown or MMD.
MultiMarkdown, or MMD, is a tool to help turn minimally marked-up plain text into well formatted documents, including HTML, PDF (by way of LaTeX), OPML, or OpenDocument (specifically, Flat OpenDocument or ‘.fodt’, which can in turn be converted into RTF, Microsoft Word, or virtually any other word-processing format).
- stackoverflow Question 11 lists some and references
Specific implementations
In Python universe, some packages. There are more.
- Markdown with its features
In Perl, there is a package:
Wikipedia has a list that is reproduced here, so that we can add/remove columns and Markdown processors.
Name | Language | Type | Description | Official site |
---|---|---|---|---|
mmd2pdf | Autoit | - | MultiMarkdown to PDF converter | google code |
md2html.awk | Awk | Converter | Markdown to Html | bitbucket |
apache-mod-sundown | C | Apache HTTPd module | Using Sundown C library | github |
Discount | C | Library and HTML converter | - | site |
libpandoc | C | Multiconverter | - | github |
peg-multimarkdown | C | - | Using parsing expressing grammar (PEG) | github, github fork |
peg-markdown | C | - | Using parsing expressing grammar (PEG) | github |
PEG Markdown Highlight | C | Syntax highlighter | Using parsing expressing grammar (PEG) | site |
Sundown | C | - | - | github |
libupskirt | C | Parser | Fork of libsoldout | github |
libsoldout | C | Parser | Simple parser only | site |
Doxygen | C++ | Sourcecode documentation generator | Doxygen supports Markdown with extra features | site |
Cpp-Markdown | C++ | Generator | Markdown to HTML | sourceforge |
RStudio | C++ | IDE for R (programming language) | C++ wrapper for sundown | site |
Qarkdown | C++ | Editor (Qt) | Simple crossplatform Markdown editor using Qt | site |
MarkdownSharp | C# | - | - | google code |
MoonShine | C# | - | - | github |
Sundown.net | C# | - | - | github |
markdown-clj | Clojure | Converter | Generates HTML from Markdown, compiles to both Clojure and ClojureScript | github |
Blackfriday | Go | - | - | github |
Goskirt | Go | - | - | github |
MaTeS | Go | Converter to HTML5 | Creates web pages or presentation slides. Supports citation, tables, math and charts. | site |
Upskirt.go | Go | - | - | github |
Pandoc | Haskell | Converter (Multiformat) | - | site |
Sundown HS | Haskell | - | - | github |
MarkdownJ | Java | - | - | google code |
pegdown | Java | - | - | github |
MarkdownPapers | Java | - | Implementation based on a JavaCC parser | site |
Txtmark | Java | - | - | github |
Markdown4j | Java | - | Extensible markdown java implementation | google code |
Dillinger | JavaScript | Editor | 'WYSIWYM' editor | site, github |
uedit | JavaScript | Editor | 'WYSIWYM' editor | github |
node-discount | JavaScript | - | node.js binding for Discount | github |
markdown-js | JavaScript | - | Parser for JavaScript/node.js | github |
marked | JavaScript | - | A fast markdown parser | github |
PageDown | JavaScript | Webeditor and viewer | Used by Stack Exchange sites | google code and github |
PageDown-Bootstrap | JavaScript | Webeditor and viewer | Fork of PageDown which uses the Twitter Bootstrap template framework | github |
Showdown | JavaScript | Webeditor and viewer | - | site/github |
markdown.pioul.fr | JavaScript | Webeditor and viewer | Minimalist Online Markdown Editor | site |
TextDown | JavaScript | Editor plugin for Chrome | - | chrome store/github |
texts.js | JavaScript | Node.js module | PEG-based grammar, intermediate format in JSON | github |
markdown.lua | Lua | - | - | luaforge |
Lunamark | Lua | Converter | HTML and LaTeX converter | github |
lua-discount | Lua | Binding | - | site |
node-multimarkdown | Node.js | Parser | Native MultiMarkdown extension for Node.js | github |
RobotSkirt | Node.js | - | - | github |
node-markdown | Node.js | - | Parse Markdown syntax with node.js | github |
gfm | Node.js | - | The port of Showdown used on github.com | github |
Markdown | Perl 6 | Parser | Markdown parser in Perl 6 | github |
Markdown.pl | Perl | Converter to (X)HTML | Official author perl markdown implementation | site |
MultiMarkdown | Perl | Converter | Markdowns originals MultiMarkdown superset | site, github |
text-markdown | Perl | Converter to (X)HTML | - | github |
markdown-oo-php | PHP | Converter to (X)HTML | Object-oriented implementation of Markdown | github |
markdown-handler | PHP | Converter to (X)HTML | github | |
PHP Markdown | PHP | Converter to HTML | - | site |
PHP Markdown Extra | PHP | Converter to HTML | Markdown with extra options | site |
PHP Markdown Extended | PHP | Converter to various formats (HTML, MAN, extensible) | Markdown extended syntax | github |
PHP Markdown Viewer | PHP | Viewer | Wrapper for PHP Markdown | site |
secondcrack | PHP | Blog | A static-file Markdown blogging engine | github, site |
qlmarkdown | Objective C | - | A Mac OS X Quicklook extension that uses Discount. | github |
Python-Markdown | Python | - | A implementation with various extensions such as tables and ignoring internal bold/italic markings. | site |
Misaka | Python | Binding | Python binding for Sundown | site |
BlueCloth | Ruby | - | - | site |
BlueFeather | Ruby | - | - | site |
ffi-sundown | Ruby | - | - | github |
gimli | Ruby | Markdown to PDF | - | gimli |
kramdown | Ruby | Library | - | rubyforge |
md2man | Ruby | Converter | Markdown to manpage | github |
markdownr.com | Ruby | Webviewer and Editor | A nifty markdown notepad | site/github |
Maruku | Ruby | Interpreter | - | github |
RDiscount | Ruby | Binding | Ruby binding for Discount | github |
Redcarpet | Ruby | Binding | Ruby binding for Sundown | github |
Knockoff | Scala | - | - | site |
Actuarius | Scala | - | - | site |
Lowdown | Chicken Scheme | Parser library (egg) | Can emit SXML | chicken wiki, Bitbucket |
markdown.bash | Bash | Converter | Markdown to Html | Github |
Alternative lightweight markup formats
The Question :
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:
asciidoctor-pdf This Prawn based asciidoc converter is quite active and has a lot of stars.
Markdown to Asciidoc with Pandoc and then this is the best option I’ve seen so far.
It is not however perfect to the point of being professional production ready, in particular:
- floats like code and image don’t… float, so you get vertical whitespace on line breaks when you have large floats: https://github.com/asciidoctor/asciidoctor-pdf/issues/353
- some lines have too few words, but they are still justified horizontally, which leads to too much white space between words. TODO find / create ticket.
Gimli, but it does not seem very active (last commit 7 months ago). Backend?
markdown_prawn. Not many stars. Last commit 3 years ago.
Kramdown Prawn experimental converter. Experimental.
cmarkpdf: CommonMark to PDF through libharu by @jgm. Experimental.
Qt5 QPrinter. Used by the Retext editor through the PyQt5 Python API. TODO test. Likely to be analogous to a PhantomJS-like solution but for Qt instead of browser.
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 free 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.
Non free possibilities:
O’Reilly Atlas is doing it for their HTMLBook (HTML5 subset), but they’re not gonna open source that anytime soon.
Prince XML. Free for non-commercial use.
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:
- Sphinx allows RST to PDF with https://code.google.com/p/rst2pdf/ which uses https://bitbucket.org/rptlab/reportlab on the backend.
- Do you care what OS/Web-app? Also how about price?
- @NickWilde The freer the better, the more cross the better. Linux support would make me happy. But I wanna hear all options =)
- 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.
- @NickWilde I prefer CLI, but once again, I want to know all of them.
- prefer CLI well then that is great :D… answer coming right up.
The Answer 1
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:
- Install Node.js (if necessary)
- Install Markdown-PDF – from cmdline just run
npm install -g markdown-pdf
- 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.
The Answer 2
I personally am a huge fan of pandoc
.
Pandoc is the “swiss-army” knife tool of format conversions:
- Its core source input format supported is
Markdown
(including any of the major MD “dialects” such as the flavors of GitHub and PHP plus several special extensions). Other input formats are:HTML
,rST
,Textile
,DocBook XML
,MediaWiki
. - As output formats it supports:
ConTeXt
,LaTeX
,PDF
andBeamer PDF
(albeit requiring LaTeX in the background),MediaWiki
,DOCX
,DocBook
,rST
,Textile
,ASCIIDoc
,texinfo
,org
(Emacs Org-mode),S5
(HTML slides),Slidy
(HTML slides),Slideous
(HTML slides),ImpressJS
(HTML slides),DZSlides
(HTML slides),HTML
,HTML5
,EPUB
,EPUB3
…and:manpage
(GROFF manpage) andODT
(OpenDocument Text).
MultiMarkdown Converter Problems
Are you still with me? Good.
Did you notice the last two, manpage
and ODT
?
Well, these are the two output formats which I personally “abuse” as intermediate formats in order to arrive at PDF for final documents when I do not want LaTeX involved.
I’ve automated my workflow and process chain with the help of a Makefile. So I just need to type make mydoc.latexpdf
, or make mydoc.odtpdf
, or make mydoc.manpdf
. The Makefile is set up to look for an input of mydoc.mmd
, and then it sets the appropriate commands in motion: pandoc
to create the PDF directly (which in the background first converts to LaTeX and then runs pdflatex
itself), ODT or manpage. Then the next command is to create the final format:
For my
.odtpdf
target it runs LibreOffice in headless mode. Here are the basic command lines I use for the (I’m on OS X, so for Linux or Windows you’ll have to adapt paths accordingly). Attention, command is in Makefile syntax — cannot be directly used in Shell without prior adaption:For my
.manpdf
target it usesman -t
to create PostScript from Pandoc’s manpage output file, then uses Ghostscript to create the PDF. It therefore runs:
Customize the look’n’feel of your ODT output
The non-LaTeX path to PDF via ODT is the most “sexy” for me…
- …because Pandoc knows how to apply some nice personalized styles to a target ODT if only these styles are properly defined in a
myreference.odt
! (These styles will of course then transfer to the PDF too.)
I can then run the Pandoc command (via Makefile or in the Shell) to create an ODT to my likings, complete with the font faces, sizes and colors I prefer, with the page sizes and page headers, footers or backgrounds I defined (again: Makefile syntax!):
The --from=markdown+...+...+
parameter tells Pandoc to accept several Markdown syntax extensions which I like to use in my MD source files.
The sweet secret to get the styles in the ODT document lies with the --reference-odt=/path/to/myreference.odt
command line parameter.
The ODT output works with references and bibliography even (if your Markdown input is properly written for this)!
Using Windows?
In principle, this workflow should work on Windows too, because Pandoc also runs on Windows. I have run Pandoc on Windows before, but I have not myself setup a completely automatic workflow, first “Pandoc
: Markdown -> ODT“, then “.soffice
: ODT-> PDF“ based on a Makefile here, though…
But you may want to explore another path on Windows:
- create a DOCX output from Pandoc first;
- then convert the DOCX to PDF (automatically or interactively via WinWord).
Yes, you can also customize the styles of the DOCX output files by using the --reference-docx=my-reference.docx
switch. Just create a my-reference.docx
file first which uses exactly the styles you want. Pandoc will then extract these from the reference doc and apply them to the output DOCX it generates!
Multimarkdown Converter Programs
From there, you can look how to convert the intermediate DOCX file to PDF. This can also be done automatically: you may also want to consider OfficeToPDF.exe. It is hosted on CodePlex, licensed with the Apache 2.0 License and available in binary and in source code.
Finally: be sure to use the latest and greatest version of Pandoc (currently v1.17.0.3 or later) — there have been a lot of features added in recent months, esp. when it comes to DOCX output!
The Answer 3
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.
Installation:
- 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
Usage:
To use takes two CLI calls. You can of course just save this as a batch file and run that.
* 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.
The Answer 4
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:
Then use something like this in your Gruntfile.js
:
Then in your build you just call the two in succession:
If you want it to look pretty, you’ll have to fiddle more with the marked
settings, but I’m sure it’s doable.
The Answer 5
It’s not sexy, but AbiWord will convert HTML to PDF.
So, assuming you’ve got abiword installed:
The Answer 6
I have recently created a service to convert markdown documents to PDF. It supports GitHub flavoured markdown as well as syntax highlighting. The service is located at: http://markdown2pdf.com
The Answer 7
I just convert from HTML instead. This works for my needs:
I found that in general Markdown is not a good format to convert to PDF, as itdoesnt have native CSS support. Here is the script I use:
This solution just needs PHP (25 MB) and DomPdf (4 MB), so quite lightweightcompared to other options.