2022-09-04 18:37:13

# markdown导出pdf方法优劣分析


md2pdf pandoc Typora MarkText PDFPatcher --20220903

xushufa (opens new window) blog (opens new window) gitlab (opens new window) gitee (opens new window)

# 1 概述

# 1.1 目标

markdown导出pdf期望达到理想效果:

  • 内容不丢失,标题、正文、高亮、代码块等内容不会丢失,即使是代码块也能无损导出。
  • 格式不变形,字体、样式与markdown看到的基本一致。
  • 有图片,markdown的图片不论是网络链接还是base64都能正常导出。
  • 有书签,markdown的一二三四级标题就是pdf的书签。
  • 操作简单,一键导出,高效方便。

# 1.2 说明

使用了Typora作业部落小书匠马克飞象浏览器打印pandocxelatexwkhtmltopdfvscodeMarkText等等许多方法将markdown导出pdf。有的收费,有的加水印,有的丢文字,有的丢图片,最后发现:

  • 操作markdown文件,使用Typora最方便。
  • 若markdown导出pdf,MarkText搭配PDFPatcher最优秀。

# 2 工具

# 2.1 Typora

Typora可以说是markdown的最佳拍档,可是免费beta版之后,1.0版Typora开始收费。
最后一个免费版本是0.11.8,安装或使用这个版本会提示软件过期,不可使用。
但低版本可以正常使用Typora,如0.9.86版。

Typora + pandoc 可以将markdown导出pdf,可惜导出文件会丢失图片。
Typora导出html,再通过浏览器导出pdf,不丢失图片,但是文档格式稍有变化,且没有书签。

Typora + pandoc 导出pdf时,可以将图片链接换成base64编码,这样不会丢失图片。
但是这样做文档内容会特别大,一张图片的base64编码可能有几万字。
且文档的base64图片编码多了,使用Typora报错:该文件过大,因此无法在Typora中呈现。

Typora导出pdf 1Typora


# 2.2 pandoc

Pandoc 是一个由 John MacFarlane 开发的通用文档转换工具,可以支持大量标记语言之间的格式转换,例如 Markdown 、Microsoft Word、PowerPoint、 Jupyter Notebook、HTML、PDF、LaTeX、Wiki、EPUB 格式之间的相互转换。官方称之为该领域中的“瑞士军刀”。
参考:
https://blog.csdn.net/horses/article/details/108536784
https://github.com/jgm/pandoc/releases/tag/2.19.2


md->docx->PDF

pandoc -s example.md -o target.docx --reference-doc reference.docx
https://www.trickyedecay.me/2020/08/04/use-pandoc-to-convert-markdown-to-docx/


pandoc text.md -o text.docx
pandoc 无为徐生.md -o 无为徐生_pandoc.docx

https://www.jianshu.com/p/52cbee87a45a

样式相当失真,导出的pdf文件与md文件差异较大。


Pandoc+TeXLive实现Markdown转PDF
https://zhuanlan.zhihu.com/p/35813989
https://www.jianshu.com/p/1d02fc5121c2

$ fc-list :lang=zh

pandoc 无为徐生.md -o 无为徐生_xelatex.pdf --pdf-engine=xelatex -V CJKmainfont='KaiTi'

《无为徐生_xelatex.pdf》丢失图片,没有书签,格式变化。


# 2.3 wkhtmltopdf

pandoc --pdf-engine=wkhtmltopdf --metadata pagetitle="无为徐生" 无为徐生.md -o 无为徐生_wkhtmltopdf.pdf
《无为徐生_wkhtmltopdf.pdf》样式比较失真。

https://cloud.tencent.com/developer/article/1740818?from=article.detail.1854429
https://cloud.tencent.com/developer/article/1854429


# 2.4 vscode

Visual Studio Code安装Markdown Preview Enhanced 插件

vscode中markdown导出pdf
https://blog.csdn.net/weixin_43352942/article/details/89950779
https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/toc

C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe

《无为徐生_vscode.pdf》丢失图片,没有书签,格式变化。

vscode导出pdf 2vscode


# 2.5 MarkText

MarkText是一个简单开源的 Markdown 编辑器。 https://github.com/marktext/marktext
导出的pdf文件相当不错。

《无为徐生_MarkText.pdf》文件样式内容图片基本没有变化,很好。
就是没有书签,但可以使用PDFPatcher PDF补丁丁 为pdf文件加上书签。


工具箱--处理PDF文件--自动生成书签
《无为徐生_MarkText.xml》即为pdf书签

打开文件--导入书签--保存PDF文件
《无为徐生_MarkText_PDFPatcher.pdf》 内容不丢失 | 格式不变形 | 有图片 | 有书签 | 操作简单 good


MarkText导出pdf 3MarkText


PDFPatcher生成书签 4PDFPatcher

PDFPatcher导入书签 5PDFPatcher

PDF书签打开 6PDFPatcher


# 2.6 评分

评分 内容不丢失 格式不变形 有图片 有书签 操作简单 得分
Typora × ★★★★
pandoc ★★★
wkhtmltopdf ★★★
vscode × × ★★☆
MarkText ★★★★☆

操作markdown文件,使用Typora最方便。
若markdown导出pdf,MarkText搭配PDFPatcher最优秀。