我发现许多解决方案难以重现/获得正确的版本/理解/修复/等等......因此,我将提供一个拼凑的 docker 解决方案,以便在 Windows(使用 git bash)/MacOS/Linux 上轻松转换 5 “简单”的命令
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
perl 是如果没有更好的解决方案可能会失败的主要部分。Pandoc 有一个非常好的过滤器解决方案,但没有使用 github 管道。
错误:
超宽的代码块将使用滚动条呈现,并且基本上在 pdf 中被截断。最好使代码块不溢出,但您可以添加--user-style-sheet user.css
到 wkhtmltopdf 命令(在toc
/之前cover
),然后添加到您的user.css
.markdown-body .highlight pre,
.markdown-body pre{
overflow:visible !important;
}
最终 pdf 中的某些链接被 +1 页关闭,有些则不是。不知道模式是什么。但是ids(#)的anchors似乎没有这个问题