欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vscode markdown preview enhance 插件 pdf 导出

程序员文章站 2022-07-05 22:25:12
...

vscode markdown 导出为 pdf 方法探究

前言

Markdown Preview Enhanced(下文简称为 MPE) 是 vscode 中的神级插件。对 markdown 文件提供了许多方面的支持,功能十分强大,上天入地无所不能。本文介绍的 markdown 转化为 pdf 文件主要就是基于该插件。

虽然说插件的作者写了详细的使用文档,但是由于该插件的高级功能需要用户本身有着较好的计算机基础,因此对于小白(对我就是那个小白????)而言,仍然不是件容易的事。

我研究了一下午如何使用 MPE 导出 pdf 文档,虽然说目前仍然无法导出十全十美的文档,但总算有了一些突破,特此分享一下。如果有朋友,vscode 导出 pdf 有更好的主意,也请不吝赐教。

这边还需要提一下,之前 MPE 还支持 phantomjs 打印不过现在不支持了。

点击此处,下载本文演示用于 pdf 导出的 md 文档。

Open in Browser 导出

最通用的方式,就是右键预览页面,然后选择 Open in Browser,然后打印浏览器页面。这个方式的打印效果,随着打印所用的浏览器以及所使用的虚拟打印机的不同,而有轻微的差异。

vscode markdown preview enhance 插件 pdf 导出

vscode markdown preview enhance 插件 pdf 导出

仅展示在 chrome 打开,用 adobe acrobat 打印的文件。总体感觉上看,chrome 对 pdf 打印的支持稍微好于 firefox。

具体效果,有兴趣的朋友可以自己尝试一下。但总的来说这种方式有一大缺点,那就是 打印出来的 pdf 是图片类型的,文章中的连接之类全部失效。

Chrome(Puppeteer)导出

接下来讲一个稍复杂的,用 Chrome(Puppeteer)导出。首先,你电脑上得安装有 Chrome 浏览器。然后,右键预览页面,选择 Chrome(Puppeteer) 选项下面的 PDF,即可。

vscode markdown preview enhance 插件 pdf 导出

这种方式导出的 pdf 文档,是符合我们喜好的文字型的 pdf 文档。

vscode markdown preview enhance 插件 pdf 导出

但是默认样式下有个问题就是 文字太淡。事实上说明文档中介绍,这种方式应该是能通过 front matter 来进行调整的。所谓的 Front-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量,具体可以参考 hexo 的说明。

然而遗憾的是,帮助文档中对 Puppeteer 的 front matter 介绍太少,我一一试下感觉效果不好。编写的 front matter 如下(不知道其他可以的参数名是什么):

puppeteer:
  pdf:
    format: A4
    displayHeaderFooter: true
    margin:
        top: 0.05cm
        right: 0.05cm
        bottom: 0.05cm
        left: 0.05cm
  image:
    quality: 90
    fullPage: true

vscode markdown preview enhance 插件 pdf 导出

不过从图像上看,这个 front matter 好像一点效果都没有 ????。

pandoc 导出

和前一节中的 Puppeteer 不同的是使用 pandoc 必须要编写 front matter。帮助文档中对于 pandoc front matter 介绍 的稍微详细一些。在我不断尝试下,终于能够打印出还算过得去的 pdf 文档。这里安装 pandoc 之类的操作就请参考帮助文档。我们直接进入正题,我编写的 front matter 如下:

title: 测试
author: aaa@qq.com
date: 2019年6月8日
# 指定汉字字体,如果缺少中文显示将不正常
CJKmainfont: 方正苏新诗柳楷简体-yolan
# latex 选项
fontsize: 12pt
linkcolor: blue
urlcolor: green
citecolor: cyan
filecolor: magenta
toccolor: red
geometry: margin=0.3in
papersize: A4
documentclass: article

# pandoc设置
output:
  pdf_document:
    path: /Exports/Habits.pdf
    toc: true
    toc_depth: 2
    number_sections: true
    highlight: tango
# 打印背景色
# 保存文件时自动生成
# export_on_save:
#   pandoc: true

效果如下:

vscode markdown preview enhance 插件 pdf 导出

效果还算不错。用了 tango 代码高亮主题,这个主题好就好在,代码部分有深一点的背景色,易于区分。

prince 导出

首先需要安装 prince,如果安装 prince 后,右键预览选择 PDF(prince) 提示 princexml 没有安装,是 prince 没有被添加到系统变量中,请按如下操作

默认,情况下 prince 导出效果如下:

vscode markdown preview enhance 插件 pdf 导出

可以看到,对中文和 latex 的支持不好。

其实帮助文档已经提到,prince 对 ketex 和 mathjax 的支持不好。并且这个导出的文档无法支持目录跳转,于是我就不再进一步研究了。

eBook 导出

最后就是 eBook 导出了。终于快写玩了 ????。eBook 到处需要用到 Calibre,按帮助文档说明安装,将 ebook-convert 加入到系统变量。

在导出 pdf 前同样需要编写 front matter ,否则导出的 pdf 为空。不过就算是编写了 front matter ebook 目前导出 pdf 还是存在问题。

这一点其实帮助文档中也有提到。不过导出 equb 文件效果还是不错的。这是我编写的导出 equb 的 front matter:

ebook:
  title: mytest
  author: aaa@qq.comcom
  margin: 10
  cover: https://csdn-blog-1258434200.cos.ap-shanghai.myqcloud.com/undefinedhwc_ttoto.jpg
  epub:
    no-default-epub-cover: true
    pretty-print: true	

效果如下:

vscode markdown preview enhance 插件 pdf 导出

vscode markdown preview enhance 插件 pdf 导出

vscode markdown preview enhance 插件 pdf 导出

latex 支持倒可以,不过有部分图像不能正确显示,用 calibre 将这个 equb 转换成 pdf 后效果更差:

vscode markdown preview enhance 插件 pdf 导出

所以,这种方式目前也只是看看而已了。

特别提示

front matter 的编写

编写 front matter 时,不熟悉的人(如我)很容易犯错,所以可以将设置中 Front Matter Rendering Option 设置为 table,这样 front matter 将在预览中以 table 形式存在,比较直观(默认是none):

vscode markdown preview enhance 插件 pdf 导出

更改之后显示的表格:

vscode markdown preview enhance 插件 pdf 导出

如果明显写错,那么就看不到表格。另外注意这边空格和tab也得严格区分开,否则虽然能看到表格,但是设置实际上是无效的。

pandoc parse

MPE 的设置中有个选项,Use Pandoc Parse。这个设置慎用,如果勾选了这个,那么 MPE 将用 pandoc 解析md,目前看来会导致一些问题。比如无法跳转目录(在预览中)、语法拓展高亮失效等。

vscode markdown preview enhance 插件 pdf 导出

其他插件

既然已经试了 MPE 的这么多种转换方法,不妨试一下其他插件,看有没有好用又方便的。

markdown pdf

这个插件配置还算简单,只要设置 chrome.exe 的路径即可。但是效果不好,如图:

vscode markdown preview enhance 插件 pdf 导出

latex 不支持的话,可以下地狱了 ???? 当然也可能是我没认真研究,评分这么高的插件应该不至于如此。

Markdown Converter

这个插件也是基于 chromium 不过,作者考虑到了 自己提供了 chromium 供用户下载。安装后在默认设置的情况下,转换后只有我的名字 ????

vscode markdown preview enhance 插件 pdf 导出

然后我查看设置,似乎也没有什么设置能改变这一切 ????

然后就没有然后了

然后我搜了一下,似乎没有什么其他能用的插件了,于是今天先到此为止 ????。

总结

如果仅用 markdown preview enchanced 插件,那么 pandoc 导出无疑是最好的方式。然后要写出得到更完美的 pdf 文档,就需要好好研究一下 pandoc 的用法了。

写文不易,如果觉得有所帮助可以小小的捐赠一下 ????。

vscode markdown preview enhance 插件 pdf 导出

你可以下载查看一下本文用 pandoc 和 Puppeteer 转换成 pdf 的效果。

链接:https://pan.baidu.com/s/1B0ANQADSgbxU1vnzp2p2Eg
提取码:m1em