A place to cache linked articles (think custom and personal wayback machine)
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

index.md 6.2KB

title: How I create fancy PDF-documents in Markdown url: https://hund.tty1.se/2021/07/14/how-i-create-fancy-pdf-documents-in-markdown.html hash_url: 0c60682eeb

Wednesday, July 14, 2021

I haven’t had the need to create any ‘fancy’ document in ages, but the other day I had to create a PDF-document with fancy formatting for a work related thing.

After some testing of various solutions and tools, I ended up with a setup using Pandoc, WeasyPrint and Markdown. I consider Markdown to be the best markup language and I use it for everything!

My example document

The source for this PDF-document looks like this:

# H1 Header

I really like using Markdown.

1. First item
2. Second item
3. Third item
4. Fourth item

> This is some quoted text.

```sh
#!/bin/sh
echo "This is a code block."
```

And this is the CSS I used:

:root {
  --blue: #3465A4;
}

@font-face {
    font-family: 'NotoSans';
    src: url('NotoSans-Condensed.ttf') format('ttf')
}

html {
    font-family: 'NotoSans';
    line-height: 1.45em;
}

h1 {
    font-size: 26px;
    color: var(--blue);
    padding-bottom: 0.15em;
    border-bottom: 1px solid #CCC;
}

pre {
    background-color: rgba(0,0,0,0.05);
    border: 1px solid rgba(0,0,0,0.1);
    padding: 1em;
    font-size: 12px;
  }

blockquote {
    background-color: rgba(0,0,0,0.05);
    border-left: 5px solid rgba(0,0,0,0.1);
    padding: 0.1em 0.75em;
}

And this is the command I used to render the document:

$ pandoc --pdf-engine weasyprint -c style.css demo.md -s -o demo.pdf 

Installation

To make this work you need to install Pandoc and WeasyPrint. In Gentoo the packages are called app-text/pandoc and dev-python/weasyprint.

With that said. I did not install Pandoc from source myself. It simply requires way too many packages for my liking (when compiled from source):

# emerge pandoc
[...]
Total: 133 packages (133 new), Size of downloads: 165,258 KiB

I instead used a binary package that’s available from their GitHub-page. The archive weights in at about 14 MB and unpacked at about 68 MB. I then just put the folder in ~/.local/bin/ and created a symbolic link to the binary file.