markdown文本转换word,pdf
pandoc及下载和安装
pandoc是什么
pandoc是一个软件,是一个能把千奇百怪的文档格式互相转换的神器,是一把文档转换的瑞士军刀(swiss-army knife)。不多说,放一张其官网(http://www.pandoc.org)
下载pandoc
下面以下载Windows下的pandoc为例:
- 官网下载链接:https://github.com/jgm/pandoc/releases/tag/2.2
- 根据自己的操作系统位数下载合适的msi安装包,我下载的是:
pandoc-2.2-windows-x86_64.msi
安装pandoc
下载pandoc安装包之后,像安装普通软件一样点开安装就可以了。安装完成之后,打开cmd命令行,输入pandoc -v,如果正常显示出类似下面的信息就表明安装成功,如果未成功,可能需要配置环境变量,把安装的路径C:\Users\Frank\AppData\Local\Pandoc\加入环境变量:
C:\Users\Administrator.PC-20170728DWIF>pandoc -v
pandoc 2.2
Compiled with pandoc-types 1.17.4.2, texmath 0.10.1.2, skylighting 0.7.0.2
Default user data directory: C:\Users\Administrator.PC-20170728DWIF\AppData\Roaming\pandoc
Copyright (C) 2006-2018 John MacFarlane
Web: http://pandoc.org
This is free software; see the source for copying conditions.
There is no warranty, not even for merchantability or fitness
for a particular purpose.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 配置bat批处理文件:
创建文本文件,写入一行代码pandoc -s test.md -o test.docx,命名为md2doc.bat;
此批处理文件将调用pandoc将test.md转换为test.docx; - 将需要转换的md文件与bat文件放在同一文件夹下;
点击md2doc.bat,闪烁cmd黑窗口,然后出现docx文件,转换成功。
需要转换的md文档与bat批处理文件放入同一文件夹下;

双击
md2doc.bat,转换;
走过的一些路,趟过的一些坑
下面是使用pandoc把markdown(以下简称md)文件转为PDF所遇到的一系列的坑。
尝试过的不合适的方案
下面涉及的转换方法可以参见pandoc的使用文档(http://www.pandoc.org/MANUAL.html),这里不再叙述细节。
- 直接使用pandoc把md转为PDF。问题:报错,原因是电脑没有安装Latex解析引擎。
- 装好了MiKTex这样一个Latex解析引擎之后,再转,又失败了,原因是不支持中文字体(md文件中有中文字体)。
- 指定字体为宋体后再转,虽然成功转为了PDF文件,但是文件的字体、行间距、排版等样式都比较丑陋,不满意。
- 在网上又搜了搜,再加上指定Latex模板文件转,虽然能够调整一些参数了,但一方面模板文件犹如天书般难懂,另一方面很多格式还是不能精细调整。
- 变换一下思路,采取迂回战术,按照
md->HTML->PDF的路径转。于是先把md转为HTML,HTML的样式倒是挺美观,然后在浏览器中使用浏览器的打印功能把HTML转为PDF。然而还是存在文档格式不能精细调整的问题。 - 发现转HTML的时候可以指定css样式文件,在css样式文件中可以配置标题、正文、段落的精细格式。奈何这种方法和Latex模板文件的缺点类似,投入/产出比过高,遂放弃。
一个不太合适的方案
在网上搜的时候,发现有一个Python三方库叫pypandoc(文档:https://pypi.org/project/pypandoc/),核心方法叫pypandoc.convert_file,支持一大堆参数。还是考虑到投入/产出比,我只是想安静地转一下md到PDF,并不想开发一个很吊的文件转换工具,所以暂时没必要去研究这个三方库的API,以后有需要再研究吧。
最终采取的解决方案
最终转换到另一种思路来,依然采用迂回战术,不过是按照:md->docx->PDF,一试,发现这种方式很靠谱,主要是因为:一是md转为docx很简单,只需pandoc的一条命令就搞定,不需要额外装其他的软件;二是转为docx文档后,还可以在其中手动精细调整字体、字号、段落之类的格式,直到自己满意为止。最后用Word也可以完美地把docx转为PDF。
而且在生成的docx文档中手工调完精细格式之后,还可以把docx文档的格式模板导出成dot文档模板文件保存,后面再生成docx文档时不需要再一个个手工调格式了,只需把这个dot模板文件中的样式全部导入即可(怎么导入可以到网上搜)。
md转为docx文档的pandoc命令类似于这样: pandoc text.md -o text.docx
这种方案最为优雅,遂采用之。
脚本封装,支持批量转换
- 把转换命令封装成bat批处理脚本,以后再进行转换的时候只需简单双击一下bat脚本即可,比如封装成
convert.bat文件,内容如下:
pandoc text.md -o text.docx && pause
- 1
- 2
- 批量处理:假如几十上百个md文件要批量转为docx文件,难道要手工一个个复制这些文件名和pandoc命令去转换吗?完全不需要,一个bat脚本搞定(
convert.bat):
@echo off
:: 遍历当前文件夹下的所有后缀名为md的文件
for /f %%a in ('dir /b *.md') do (
:: 执行pandoc命令,把每个md文件都转为docx文件,docx文件的文件名为:md文件名.md.docx
pandoc %%a -o %%a.docx
)
pause
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
假设当前文件夹下有3个md文件test1.md、test2.md、test3.md,他们的内容都为:
# 一级标题1
## 二级标题1
* 列表项1
* 列表项2
## 二级标题2
正文1-1
# 一级标题2
正文2-1
# 一级标题3
表格1:
姓名|年龄|性别
---|---|---
张三|30|男
李四|28|男
王五|29|男
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
双击执行convert.bat后,生成了3个docx文件:

打开test1.md.docx,发现整体格式还不错,并且还支持md的表格语法:

小结
- pypandoc库以后有需要了可以进一步研究一下。
- 在决定采取一种方案解决问题之前,首先要考虑投入/产出比,是否值得采用这种方案。
markdown文本转换word,pdf的更多相关文章
- Mac ---- markdown 转 html\word\pdf
在Mac上,有一个软件,叫iA writer,是一个文字编辑器,可以进行md到word的转换,但它是收费的,RMB68元. 如果只是临时用一下,不想购买,你可以使用pandoc. 在mac下,使用方法 ...
- ASP.NET将word文档转换成pdf的代码
一.添加引用 using Microsoft.Office.Interop.Word; 二.转换方法 1.方法 C# 代码 /// <summary> /// 把Word文件转换成pdf文 ...
- word ppt excel文档转换成pdf
1.把word文档转换成pdf (1).添加引用 using Microsoft.Office.Interop.Word; 添加引用 (2).转换方法 /// <summary> /// ...
- 利用 Pandoc 将 Markdown 生成 Word/PDF 文件
Pandoc 是一个格式转化工具,可以用于各(luan)种(qi)各(ba)样(zao)的文件转换, 反正我是认不全官网上的那个图(傲娇脸), 之前一直使用它将 Markdown 文件转换成 Html ...
- C#将Word转换成PDF方法总结(基于Office和WPS两种方案)
有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然 ...
- 【文件】使用jacob将word转换成pdf格式
使用jacob将word转换成pdf格式 1.需要安装word2007或以上版本,若安装07版本学确保该版本已安装2downbank0204MicrosoftSaveasPDF_ XPS,否则安装 ...
- Java转换Word文件到PDF文件
使用Docx4j将Word文件转换为PDF文件: public static void convertDocxToPDF(String docxFilePath, String pdfPath) th ...
- C#.net word excel powerpoint (ppt) 转换成 pdf 文件
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- 使用atom 将 markdown 转换成pdf
atom 下载 atom 可以直接下载 : https://atom.io/ 打开下面链接 下载上面图中绿色版本的 atom 下载完成之后,解压,可以直接打开.这样可以避免 windows 下用安装包 ...
随机推荐
- TCSL:遇到网络正常,但是添加网口打印机总是失效的问题。
1. 环境 这家店要换成TCSL餐饮系统,但是店主希望在换系统时候,保持原来系统正常运转.所以,一开始踩点和实施都是小心翼翼~~ 不过,还是遇到问题,没法打印,如果开启TCSL打印服务,就会和原来的餐 ...
- 如何让浏览器支持ES6语法,步骤详细到小学生都能看懂!
为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...
- Mysql索引最左匹配原则
先来看个例子: 1. 示例1:假设有如下的一张表: DROP TABLE IF EXISTS testTable; CREATE TABLE testTable ( ID BIGINT NOT NUL ...
- CAS实现单点登录SSO执行原理及部署
一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...
- Angularjs中的缓存以及缓存清理
写在最前面:这篇博文是2篇文章组成,详细介绍了Angularjs中的缓存以及缓存清理,文章由上海尚学堂转载过来,欢迎大家阅读和评论.转载请注明出处,谢谢! 一个缓存就是一个组件,它可以透明地储存数据, ...
- PHP workMan webSocket 转发器
PHP WorkerMan webSocket 功能演示===================================== 基本功能:实现页面websocket之间互相通讯 start_deb ...
- [Swift]LeetCode60. 第k个排列 | Permutation Sequence
The set [1,2,3,...,n] contains a total of n! unique permutations. By listing and labeling all of the ...
- iOS——调试工具LLDB学习
一.前言 LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件.在日常的开发和调试过程中给开发人员带 ...
- Java的内部类真的那么难以理解?
01 前言 昨天晚上,我把车停好以后就回家了.回家后才发现手机落在车里面了,但外面太冷,冷到骨头都能感受到寒意——实在是不想返回一趟去取了(小区的安保还不错,不用担心被砸车玻璃),于是打定主意过几个小 ...
- 如何优雅的利用Windows服务来部署ASP.NET Core程序
上一篇文章中我给大家讲述了五种部署ASP.NET Core网站的方法,其中有一种方式是通过Windows服务来进行部署,这样既可以做到开启自启动,又不会因为iis的反向代理而损失部分性能.但是美中不足 ...
