Effortless export from github wiki (?)

But... the Github wiki of a GitHub repo is a git repo in itself (introduced in August 2010).

You can clone it, push to it or pull from it.

Each wiki is a Git repository, so you're able to push and pull them like anything else.
Each wiki respects the same permissions as the source repository.
Just add ".wiki" to any repository name in the URL, and you're ready to go.

That makes the "export" part of your question really trivial.

From there, you will find tons of script for converting markdown pages into pdf:

  • a graddle task
  • a makefile
  • a python script
  • ...

I found many of the solutions difficult to reproduce/get the right version/understand/fix/etc... So instead, I'll present a patchwork docker solution to effortlessly convert on Windows(using git bash)/MacOS/Linux in 5 "easy" commands

git clone {project_url}.wiki .

# Convert *.md to *.md.html using the actual github pipeline
docker run --rm -e DOCKER_USER_ID=`id -u` -e DOCKER_GROUP_ID=`id -u` \
            v "`pwd`:/src" -v "`pwd`:/out" andyneff/github-markdown-preview

# Fix hyperlinks, since wkhtmltopdf is stricter than github servers
docker run --rm -v `pwd`:/src -w /src perl \
    perl -p -i -e 's|(<a href=")([^/"#]+?)(#[^"]*)?(">.*?</a>)|\1\L\2\E.md.html\L\3\E\4|g'\
                  *.html

# Lowercase all filename so that hyperlink match
docker run --rm -v `pwd`:/src -w /src python \
    python -c 'import sys;import os; [os.rename(f, f.lower()) for f in sys.argv[1:]]' \
               *.md.html

#Convert html to pdf using QT webkit
docker run -it --rm -e DOCKER_USER_ID=`id -u` -e DOCKER_GROUP_ID=`id -u`\
           -v `pwd`:/work -w /work andyneff/wkhtmltopdf \
           wkhtmltopdf --encoding utf-8 --minimum-font-size 14 \
           --footer-left "[date]" --footer-right "[page] / [topage]" \
           --footer-font-size 10 \
           toc \
           *.html document.pdf

The perl is the main part that may fail without a better solution. Pandoc has a really good filter solution, but isn't using the github pipeline.

Bugs:

  • Extra wide code blocks will be rendered with a scroll bar, and essentially cut off in the pdf. It would be best to make the code block not overflow, but you can add --user-style-sheet user.css to the wkhtmltopdf command (before toc/cover), and add to your user.css

    .markdown-body .highlight pre,
    .markdown-body pre{
      overflow:visible !important;
    }
    
  • Some link in the final pdf are off by +1 page, some are not. Not sure what the pattern is. But anchors with ids (#) do not appear to have this problem


Another option once you clone the wiki, especially if you are already using Atom is to use this Markdown to PDF package. Worked great for me.


I'm adding to this answer, in case it helps any new readers :) here's what I did:

I installed GitHub Desktop: https://desktop.github.com/

Then, on the wiki page in my repository, I clicked "Clone in Desktop" Clone

This saved the wiki locally as a .md file (after following the steps on screen)

I then used http://www.markdowntopdf.com/ to convert it to pdf (Note: I renamed the files to remove characters that wouldn't work in a pdf file name before uploading to the website)

The end result was really nice.