#!/usr/bin/env python import os import sys from markdown2 import markdown from xhtml2pdf import pisa """ ## Inspired by https://github.com/walle/gimli https://gist.github.com/SpotlightKid/0efb4d07f28af1c8fc1b ## Documentation of underlying tools http://xhtml2pdf.appspot.com/static/pisa-en.html Required packages: markdown2, xhtml2pdf, html5lib """ DEFAULT_EXTRAS = [ 'fenced-code-blocks', 'footnotes', 'metadata', 'pyshell', 'smarty-pants', 'tag-friendly', 'wiki-tables' ] def main(md_file, css_file): # read css file from xhtml2pdf.default import DEFAULT_CSS if css_file is not None: with open(css_file) as f: DEFAULT_CSS += f.read() # read markdown with open(md_file) as f: md = f.read() # to html html = markdown(md, extras=DEFAULT_EXTRAS) base_with_path = os.path.splitext(sys.argv[1])[0] basename = os.path.basename(base_with_path) with open('%s.pdf'%basename, "wb") as fp: # convert HTML to PDF pisa.CreatePDF(html, dest=fp, default_css=DEFAULT_CSS) if __name__ == '__main__': if len(sys.argv) == 1: print('Usage: md2pdf input.md style.css') print(' You can also set a CSS file as env var.') print(' E.g. export MD2PDF_CSS=style.css') sys.exit() if len(sys.argv) == 2: css = os.getenv('MD2PDF_CSS') if len(sys.argv) == 3: css = sys.argv[2] main(sys.argv[1], css)