如何将Github风味的Markdown转换为PDF


147

我最近开始学习Markdown以便与文档一起使用,并且需要打印一些Markdown页面。我想使用命令行,终端等实用程序,使我可以将Github风格的Markdown转换为PDF。它需要突出显示正确的语法,并且看起来不可怕。谢谢你的帮助。


GitHub上的语法着色不是GitHub Flavored Markdown的一部分。至少据我所知。
Der Hochstapler 2013年

@OliverSalzburg Github使用Linguist来突出显示语法。
DanteTheEgregore 2013年

@dillmo,先转换为HTML,然后使用Chrome浏览器以pdf格式打印。
Pacerier '16

Answers:


149

我已经成功使用握柄在Chrome中显示降价,然后在“打印”对话框中使用Chrome的“另存为PDF”选项。

pip install grip  
grip your_markdown.md

抓地力将在localhost:5000上显示markdown-只需编辑并刷新浏览器即可。准备好后打印。

与pandoc相比,这提供了更可靠的表示,并且比安装乳胶(pandoc需要pdf生成)的重量更轻。

在这个答案中,打印不是命令行,但是仍然发现它更容易/更可靠(对于长文档,包括相对链接的图像和代码突出显示,看起来像Github的100%)。


2
这很容易。
s2t2'9

15
grip your_markdown.md --export your_markdown.html在这里很有用。将其导出到html文件,然后可以使用wkhtmltopdf之类的命令从命令行中进行打印。
卢克·埃克斯顿

1
不幸的是,grip需要访问GitHub。它无法离线运行
nowox

6
或者,您可以下载(免费!)Atom(atom.io),在Atom中打开文件,使用Control + shift + M在预览中查看文件,另存为html,然后在Chrome浏览器中打开html并另存为pdf。
安德鲁·卡特

6
确实带有类似Github的框架。有没有一种方法可以打印为PDF,去掉边框/标题栏(即在框架内打印所有内容)?
Joost,

56

您还可以使用基于Node.js的markdown-pdf

npm install -g markdown-pdf
markdown-pdf /path/to/markdown

2
这非常棒而且非常容易。链接问题来自html5样板的打印CSS,您可以在自己的样式表中将其注释掉或覆盖。
罗伯特·沃特

要补充一点,它具有现成的Unicode支持,这非常好。
尼克

如果要使用GitHub的CSS文件,也可以安装github-markdown-css
jpmc26 2013年

@ jpmc26如何使用它,我不了解javascript或npm?
Abhishek Bhatia

1
@AbhishekBhatia这是我在Google搜索“ npm简介”时的第一个结果:smalljs.org/package-managers/npm。安装后,它只是埋在node_modules中的文件。
jpmc26

39

看看pandoc。它确实具有语法突出显示。它可能需要您对文档进行(较小)更改,因为它具有自己的markdown风格,而且我不知道它与GitHub风格的匹配程度如何。


3
谢谢。运行pandoc -h确实返回了对GitHub Flavored Markdown的支持,所以我将此问题标记为已解决。
2014年

2
我试图pandoc在Fedora Linux 上安装并遇到了依赖梦night-主要与LaTex有关。我的建议是先跳过pandoc,然后先尝试其他选项
IanB

对于那些使用非ASCII字母并丢失的人:将字体选项添加到pandoc,如下所示:--variable mainfont="Liberation Serif" --variable sansfont="Liberation Sans"
gluk47 2016年

4
如果有人只是在寻找命令:(sudo apt install pandoc texlive-latex-recommended texlive-xetex texlive-luatex pandoc-citeproc etoolbox wkhtmltopdf在Ubuntu上,可能不是全部都需要),那么pandoc --variable urlcolor=cyan myfile.md -o myfile.pdf
Tor Klingberg

@TorKlingberg谢谢,我认为这是最好的答案!
THC

12

如果markdown文件托管在github仓库中,则gitprint是创建pdf /打印的有趣选项。

您所需要做的就是在URL中替换github.comgitprint.com。这是gitprint主页上的示例

不幸的是,它不适用于markdown要点,仅适用于存储库中的markdown文件。


4
它也不适用于图像。:(
亚当·阿罗德

...并且格式不正确:(
Moebius

有趣的选择。优点:可以维护外部链接,并可以从输出访问它们。缺点:输出是黑白的,锚链接被删除,外部链接因为是黑白而没有在视觉上显示。
罗迪


6

正如我在评论中所述,Github使用Linguist来突出显示语法。在Github上,您可以使用它来指定语法突出显示,如下所示:

```ruby
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```

不幸的是,没有一种好的方法可以将Markdown直接转换为带有语法突出显示的PDF文件。

备择方案:

Vim

如果您有vim,则可以通过从终端运行以下命令来轻松实现语法突出显示:

vim -c hardcopy -c quit /path/to/file.ps

或在vim内部:

:hardcopy >/path/to/file.ps

这将产生一个PostScript文件,该文件可以使用例如ps2pdf转换为pdf:

ps2pdf /path/to/file.ps

来源重点

如果您想改用HTML或LaTeX的路线,则可以尝试使用Source-highlight。可以在此处找到Source-highlight支持的所有语言的列表。

一些示例的Source-highlight命令包括:

source-highlight -s java -f html -i Hello.java -o Hello1.html
source-highlight -s java -f html --input Hello.java --output Hello2.html --doc
source-highlight -s java -f html -i Hello.java -o Hello3.html --title "Happy Java with java2html :-)" --tab 3

使用此输入文件

并且每个输出各自的HTML文件:

Hello1.html
Hello2.html
Hello3.html

可以在此处找到源高亮使用的更多示例

Windows

Vimps2pdf(由Ghostscript提供)和Source-highlight均可通过Cygwin获得




1

矿山解决方案:将markdown with转换pandoc为html (不要忘了使用css for pandoc显示表格边框),然后使用打开它libreoffice,选择一个选项export as pdf

注意:这里和Internet上都没有提到解决方案对我有用:1)基于浏览器的解决方案(例如,抓地力)正在添加多余的信息,例如页面编号,而我没有设法将其删除; 2)将pandoc转换为pdf是坏了,对我来说,它会生成一个空表(也许是因为unicode,是的,我将其配置为使用xetex),3)基于站点的解决方案(即gitprint.com)也添加了多余的内容,例如类似github的边距,而我只需要一个用awk生成的简单表即可!


1
pandoc应该为您工作,例如--variable mainfont="Liberation Serif" --variable sansfont="Liberation Sans"
gluk47'Sep

@ gluk47很酷,可以!
Hi-Angel

我可以推荐此页面将markdown转换为PDF(或用于打印)markdownprint.com
Johan O

@JohanO markdownprint.com似乎已下架
derHugo

1

我已经尝试了几种chrome插件和在线转换器。
MDtr2PDF是最好的一种。它支持Github-flavored-markdown和unicode。


1
它是否支持存储在其他文件中的图像?
拉里·K

似乎不再起作用,并且不受TLS保护。
David Oliver

1

我根据个人需要优化了此代码段

# sudo apt install grip wkhtmltopdf

MD=${1:-README.md}
PDF=${2:-"$MD".pdf}
PORT=8971
DELAY=10

printf "Converting $MD to $PDF on port $PORT\n"
printf "Waiting $DELAY seconds for server to start...\n"

grip "$MD" localhost:$PORT &
sleep $DELAY
wkhtmltopdf http://localhost:$PORT "$PDF"
kill $(ps -eo pid,command | grep grip | grep -v grep | awk '{print $1}')

另存为/usr/local/bin/md2pdfsudo chmod +x /usr/local/bin/md2pdf然后保存。

用法:

  • md2pdf 将README.md转换为README.md.pdf

  • md2pdf foo.md 将foo.md转换为foo.md.pdf

  • md2pdf foo.md bar.pdf 将foo.md转换为bar.pdf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.