markdowm转pdf,Pandoc项目

  |  

摘要: 本文记录 Markdown 转 pdf 的方法

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


Markdown 是程序员平时编写各类材料和文章时最喜欢的工具,但将其作为文档分发时却不好。因为不是所有人都了解 Markdown 的语法。而且在其它平台发布文章时,不如富文本文档,因为很多平台支持富文本但不支持 markdown。

因此对于 Markdown 文件,转换文件格式以便于分发普遍的需求。

  • 对于离线分发,希望可以将 markdown 转换为 pdf
  • 对于线上发布,希望可以将 markdown 转换为富文本

$1 Typora

用 Typora 打开 markdown 文件,然后 Export 为 pdf 文件。非常方便,此外还可以 Export 为 html, epub, docx 等常见格式。

这种方式可以处理 markdown 中的图片,公式。

$2 Pandoc

Pandoc 项目是格式转换的瑞士军刀,它可以将文档在 Markdown、LaTeX、HTML、docx 等多种标记格式之间相互转换,并支持输出 PDF、EPUB、HTML 等多种格式。

项目地址: https://www.pandoc.org/

在文章 jupyter notebook嵌入Hexo 中,我们解决了 jupyter notebook 嵌入 Hexo 页面这个需求,其中的方案1 就是依赖 pandoc 这个工具的。

安装

https://pandoc.org/installing.html,对于 Ununtu,可以直接从软件源安装:

1
sudo apt install pandoc

使用

1
pandoc <files> <options>

其中

  • <files> 为输入的内容,其输入即可以来自文件,也可以来自标准输入甚至网页链接。
  • <options> 为参数选项。

主要的参数选项

参数/选项 描述
-f <format>、-r <format> 指定输入文件格式,默认为 Markdown
-t <format>、-w <format> 指定输出文件格式,默认为 HTML
-o <file> 指定输出文件,该项缺省时,将输出到标准输出
--highlight-style <style> 设置代码高亮主题,默认为 pygments
-s 生成有头尾的独立文件(HTML,LaTeX,TEI 或 RTF)
-S 聪明模式,根据文件判断其格式
--self-contained 生成自包含的文件,仅在输出 HTML 文档时有效
--verbose 开启 Verbose 模式,用于 Debug
--list-input-formats 列出支持的输入格式
--list-output-formats 列出支持的输出格式
--list-extensions 列出支持的 Markdown 扩展方案
--list-highlight-languages 列出支持代码高亮的编程语言
--list-highlight-styles 列出支持的代码高亮主题
-v、--version 显示程序的版本号
-h、--help 显示程序的帮助信息

markdown 转 html

  • 不包含任何样式
1
pandoc file.md -o file.html
  • 转换时引入自己的层叠样式表 CSS 文件
1
pandoc file.md -c style.css -o file.html
  • 外部文件嵌入到 HTML 文档中,生成一个自包含的独立文件

--self-contained 的意思是将任何的外部文件嵌入至输出的文件中,形成一个独立的 HTML 文档。这样传送资料时只传送一个文件就可以了,类似于 pdf。

1
pandoc file.md --self-contained -c style.css -o file.html

输出 docx

Pandoc 无法为生成的 docx 文档指定排版方式。需要二次编辑,将标题、正文等调整为满意的样式,然后再进行后续的转换或分发。

本地 markdown 转 docx

有一部分公式可以以图片的方式正确显示,有一些公式不能正确显示。

1
pandoc file.md -o file.docx

将在线的 html 页面转 docx

注意这种方式无法正确显示公式,并且会把不属于正式内容的部分也放进来。

1
pandoc https://.../...html -o page.docx

输出 pdf

可以直接生成 pdf,如果有公式,需要有 LaTeX 环境。

1
pandoc file.md -o file.pdf

也可以用过渡的方式

  • Typora 打开(前面有提到),然后导出 pdf
  • 输出 html(前面有提到),然后在浏览器打开,然后导出 pdf

转换为 markdown

以将任何支持的输入格式转换为 Markdown。注意 pdf 是无法直接转换为 markdown 的。

docx 转 markdown

1
pandoc file.docx -o file.md

html 转 markdown

注意 CSS 文件决定最终的显示样式

1
pandoc https://....

$3 md2all

之前用过 md2all 这个工具,可以在一定程度上解决用 markdown 写完一篇文章后在多个富文本平台发布的问题。详见 md2all。它的问题是对公式支持的不好。


Share