Various means for Markdown to PDF via Pandoc (not always HTML/CSS friendly)
Pacharapol Withayasakpunt
Posted on October 6, 2020
This is also the case with RMarkdown.
I am doing this on Ubuntu Linux, and it might work easily for macOS, but not sure about Windows.
Installing pandoc is only a starting point. Dependencies are required.
To get started,
sudo apt install pandoc
sudo apt install texlive-full # If you are planning on converting via LaTeX or ConTeXt
sudo apt install wkhtmltox # If you are planning on converting via HTML engine
sudo apt install inkscape libsvg-bin # If you are planning on using SVG (at least in TeX)
Margins might not be what you want, and YAML frontmatter is a way, not always Markdown content
I haven't find a way to do this in all LaTeX, ConTeXt, and HTML mode.
Also, for LaTeX and ConTeXt, you can put the TeX code directly in Markdown.
In ConTeXt, where I see as most flexible, you can change paper sizes and margins easily as well.
- https://wiki.contextgarden.net/Layout
- https://tex.stackexchange.com/questions/71048/how-to-set-the-page-layout-dimensions-in-context
\setuppapersize[A4, portrait]
\setuplayout[
header=0pt,
margin=2cm,
footerdistance=0pt]
IIRC, in LaTeX, the only way is to put geometry: a4,margin=2cm
inside YAML frontmatter.
In TeX mode, CSS styling and extended Markdown are not always working (as far as I can find)
I need this for image resizing. I don't know which Markdown parser supports everything I want, unless I extend the engine myself (as I did in Showdown.js and Markdown-it).
This post, where I find later, might help to answer.
Customizing pandoc to generate beautiful pdf and epub from markdown
Sundeep ・ Mar 11 '19
Syntax highlighting is not supported in ConTeXt, only in LaTeX and HTML5 (with wkhtmltopdf)
I suffered from this greatly, albeit I can fix with some kind of Markdown to PNG.
`pandoc in.md -t context -o out.pdf` doesn't have syntax highlighting
Pacharapol Withayasakpunt ・ Oct 5 '20
Markdown is not a templating engine, and cannot include other files
Where TeX can, but \input{}
cannot include Markdown files, only TeX.
So, I fixed it with another templating engine (Handlebars). (See Pandoc branch.)
patarapolw / make-pdf
Beautifully make a pdf from couples of image files
Pandoc requires you to be the correct Current Working Directory
To locate local images, or you don't want to put images in your PDF?
Lastly, Pandoc + texlive-full are a hell of installation
Combining together, both are large (5GB), and slow-to-compile (especially ConTeXt MarkIV).
It might not be that large, if I use merely wkhtmltox (or topdf).
But, can I trust it better than Puppeteer or Electron? Not only smaller, but I also know what I am expecting.
However, Electron is much less customizable than Puppeteer.
https://www.npmjs.com/search?q=html%20pdf
There is also a way via PhamtomJS. Not sure how well it compared to all other options. But again, I have to download a binary for this...
Posted on October 6, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.