Pandoc命令将Markdown格式文件转换为HTML格式

607次阅读
没有评论

最近需要将Md文件转换成HTML格式,有多种方法实现这个目标

一是使用开源js修改,二是使用使用Pandoc这个免费强大的工具来转换

如果是想实现MarkDown转换成Word格式,可以先将Markdown转为HTML,再将HTML转换为Word

一、Pandoc命令介绍

Pandoc是一个强大的格式语言转换工具,比如可用Pandoc命令将Markdown格式文件转换成HTML格式文件。如果您需要将文件从一种标记格式转换为另一种标记格式,pandoc 就是您的瑞士军刀。Pandoc 可以在以下格式之间进行转换:

几乎无所不能

二、Pandoc安装方法

安装 pandoc: 从http://Pandoc.org 官网 获取最新 pandoc 版本 安装程序。

下载适用于 Windows(64 位)的最新安装程序

有关安装 pandoc 的替代方法,请参阅下面的操作系统标题。

Windows

最简单方法:pandoc 的下载页面有一个包安装程序。这将安装 pandoc,替换旧版本,并更新您的路径以包含安装 pandoc 二进制文件的目录。

如果您不想使用 msi 安装程序,我们还提供了一个 zip 文件,其中包含 pandoc 的二进制文件和文档。只需解压缩此文件并将二进制文件移动到您选择的目录即可。

或者,您可以使用Chocolatey安装 pandoc :

choco install pandoc

Chocolatey 还可以安装与 Pandoc 集成的其他软件。例如,要安装rsvg-convert(从librsvg,涵盖不支持 SVG 的格式)、Python(使用 Pandoc 过滤器)和MiKTeX (使用LaTeX排版 PDF ):

choco install rsvg-convert python miktex

或者,您可以使用 winget 安装pandoc:

winget install pandoc

使用多种安装方法可能会导致 pandoc 的两个单独安装;建议在切换到其他安装方法之前正确卸载 pandoc。

默认情况下,Pandoc 使用 LaTeX 创建 PDF。我们建议通过MiKTeX安装它。

Windows

直接下载Msi Zip. 也可以使用下面方法
choco install pandoc
# 其他Pandoc软件安装
choco install rsvg-convert python miktex

MacOs

brew install pandoc
# Pandoc解析器
brew install pandoc-citeproc
# 其他Pandoc软件安装
brew install librsvg python homebrew/cask/basictex

Ubuntu/Debian

sudo apt install pandoc
# 如果想输出PDF,可以安装TeX Live
sudo apt install texlive

Linux

sudo yum install pandoc
# 如果想输出PDF,可以安装TeX Live
sudo yum install texlive

三、具体转换命令

具体转换命令如下:

pandoc --standalone --self-contained --css pandoc.css 源文件.md --output 目标文件.html

以上转换命令中选项含义介绍如下。
1、“–standalone”
为目标格式文件增加合适的“header”和“footer”。如果目标格式是“HTML”,那么通过该选项可解决“由于未设置合适的字符编码,而导致的乱码问题”。
2、“–self-contained”
如果目标格式是“HTML”,那么可得到如下效果:在转换得到目标HTML文件的过程中,会将依赖的“脚本,CSS,图片,视频”等文件的内容内嵌到目标HTML文件中。
3、“–css pandoc.css”
使得目标格式文件最后使用“pandoc.css”文件作为CSS文件,否则,使用默认的CSS文件有可能只能得到丑陋的展现效果。
4、“原文件.md”
原文件,从中也可以知道原文件的格式为“Markdown”。
5、“–output 目标文件.html”
指定目标文件路径,从中也可以知道目标文件的格式为“HTML”。

上面是Md 转 HTML

如果是Markdow转Word, 则使用命令:

pandoc -f markdown -t html ./你的Md文件名.md | pandoc -f html -t docx -o 你的Word文件名.docx

四、选用的CSS文件

以下内容来自百度搜索

使用Pandoc命令将Markdown格式文件转换成HTML格式文件,目标HTML文件如果使用默认的CSS文件,那么展现效果非常丑陋,因而需要使用独立的CSS文件。
网上找到的的CSS文件内容如下,来自于链接

/*
 * I add this to html files generated with pandoc.
 */

html {
  font-size: 100%;
  overflow-y: scroll;
  -webkit-text-size-adjust: 100%;
  -ms-text-size-adjust: 100%;
}

body {
  color: #444;
  font-family: Georgia, Palatino, ‘Palatino Linotype‘, Times, ‘Times New Roman‘, serif;
  font-size: 12px;
  line-height: 1.7;
  padding: 1em;
  margin: auto;
  max-width: 42em;
  background: #fefefe;
}

a {
  color: #0645ad;
  text-decoration: none;
}

a:visited {
  color: #0b0080;
}

a:hover {
  color: #06e;
}

a:active {
  color: #faa700;
}

a:focus {
  outline: thin dotted;
}

*::-moz-selection {
  background: rgba(255, 255, 0, 0.3);
  color: #000;
}

*::selection {
  background: rgba(255, 255, 0, 0.3);
  color: #000;
}

a::-moz-selection {
  background: rgba(255, 255, 0, 0.3);
  color: #0645ad;
}

a::selection {
  background: rgba(255, 255, 0, 0.3);
  color: #0645ad;
}

p {
  margin: 1em 0;
}

img {
  max-width: 100%;
}

h1, h2, h3, h4, h5, h6 {
  color: #111;
  line-height: 125%;
  margin-top: 2em;
  font-weight: normal;
}

h4, h5, h6 {
  font-weight: bold;
}

h1 {
  font-size: 2.5em;
}

h2 {
  font-size: 2em;
}

h3 {
  font-size: 1.5em;
}

h4 {
  font-size: 1.2em;
}

h5 {
  font-size: 1em;
}

h6 {
  font-size: 0.9em;
}

blockquote {
  color: #666666;
  margin: 0;
  padding-left: 3em;
  border-left: 0.5em #EEE solid;
}

hr {
  display: block;
  height: 2px;
  border: 0;
  border-top: 1px solid #aaa;
  border-bottom: 1px solid #eee;
  margin: 1em 0;
  padding: 0;
}

pre, code, kbd, samp {
  color: #000;
  font-family: monospace, monospace;
  _font-family: ‘courier new‘, monospace;
  font-size: 0.98em;
}

pre {
  white-space: pre;
  white-space: pre-wrap;
  word-wrap: break-word;
}

b, strong {
  font-weight: bold;
}

dfn {
  font-style: italic;
}

ins {
  background: #ff9;
  color: #000;
  text-decoration: none;
}

mark {
  background: #ff0;
  color: #000;
  font-style: italic;
  font-weight: bold;
}

sub, sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sup {
  top: -0.5em;
}

sub {
  bottom: -0.25em;
}

ul, ol {
  margin: 1em 0;
  padding: 0 0 0 2em;
}

li p:last-child {
  margin-bottom: 0;
}

ul ul, ol ol {
  margin: .3em 0;
}

dl {
  margin-bottom: 1em;
}

dt {
  font-weight: bold;
  margin-bottom: .8em;
}

dd {
  margin: 0 0 .8em 2em;
}

dd:last-child {
  margin-bottom: 0;
}

img {
  border: 0;
  -ms-interpolation-mode: bicubic;
  vertical-align: middle;
}

figure {
  display: block;
  text-align: center;
  margin: 1em 0;
}

figure img {
  border: none;
  margin: 0 auto;
}

figcaption {
  font-size: 0.8em;
  font-style: italic;
  margin: 0 0 .8em;
}

table {
  margin-bottom: 2em;
  border-bottom: 1px solid #ddd;
  border-right: 1px solid #ddd;
  border-spacing: 0;
  border-collapse: collapse;
}

table th {
  padding: .2em 1em;
  background-color: #eee;
  border-top: 1px solid #ddd;
  border-left: 1px solid #ddd;
}

table td {
  padding: .2em 1em;
  border-top: 1px solid #ddd;
  border-left: 1px solid #ddd;
  vertical-align: top;
}

.author {
  font-size: 1.2em;
  text-align: center;
}

@media only screen and (min-width: 480px) {
  body {
    font-size: 14px;
  }
}
@media only screen and (min-width: 768px) {
  body {
    font-size: 16px;
  }
}
@media print {
  * {
    background: transparent !important;
    color: black !important;
    filter: none !important;
    -ms-filter: none !important;
  }

  body {
    font-size: 12pt;
    max-width: 100%;
  }

  a, a:visited {
    text-decoration: underline;
  }

  hr {
    height: 1px;
    border: 0;
    border-bottom: 1px solid black;
  }

  a[href]:after {
    content: " (" attr(href) ")";
  }

  abbr[title]:after {
    content: " (" attr(title) ")";
  }

  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after {
    content: "";
  }

  pre, blockquote {
    border: 1px solid #999;
    padding-right: 1em;
    page-break-inside: avoid;
  }

  tr, img {
    page-break-inside: avoid;
  }

  img {
    max-width: 100% !important;
  }

  @page :left {
    margin: 15mm 20mm 15mm 10mm;
}

  @page :right {
    margin: 15mm 10mm 15mm 20mm;
}

  p, h2, h3 {
    orphans: 3;
    widows: 3;
  }

  h2, h3 {
    page-break-after: avoid;
  }
}

参考文献:
[1]https://gist.github.com/killercup/5917178
[2]https://gist.github.com/ryangray/1882525
[3]https://zh.wikipedia.org/wiki/Pandoc

希望对您有所帮助!

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 
评论(没有评论)