zoukankan      html  css  js  c++  java
  • markdown文本转换word,pdf

    pandoc及下载和安装

    pandoc是什么

    pandoc是一个软件,是一个能把千奇百怪的文档格式互相转换的神器,是一把文档转换的瑞士军刀(swiss-army knife)。不多说,放一张其官网(http://www.pandoc.org

    下载pandoc

    下面以下载Windows下的pandoc为例:

    安装pandoc

    下载pandoc安装包之后,像安装普通软件一样点开安装就可以了。安装完成之后,打开cmd命令行,输入pandoc -v,如果正常显示出类似下面的信息就表明安装成功,如果未成功,可能需要配置环境变量,把安装的路径C:UsersFrankAppDataLocalPandoc加入环境变量:

    C:UsersAdministrator.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:UsersAdministrator.PC-20170728DWIFAppDataRoamingpandoc
    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文件:

    image.png

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

    image.png

    小结

    • pypandoc库以后有需要了可以进一步研究一下。
    • 在决定采取一种方案解决问题之前,首先要考虑投入/产出比,是否值得采用这种方案。
  • 相关阅读:
    表单标签
    无序列表有序列表
    跳转锚点
    HTML标签01
    HTML基本结构和属性
    python爬虫学习笔记(二十三)-Scrapy框架 CrawlSpider
    python爬虫学习笔记(二十二)-Scrapy框架 案例实现
    python爬虫学习笔记(二十一)-Scrapy框架 setting
    python爬虫学习笔记(二十)-Scrapy框架 Pipeline
    python爬虫学习笔记(十九)-Scrapy 数据的保存
  • 原文地址:https://www.cnblogs.com/jjg0519/p/10435623.html
Copyright © 2011-2022 走看看