情景引入

手写了一个生成 markdown 格式文档的工具。

但是公司有时候需要 word 类型的文档,有时候我们又需要 pdf 格式的文档。

方式一:自己造轮子

为每一种转换都写一种实现,但是很消耗时间。

而且看了 word 的相关生成,也不是很友好。

会导致迭代周期变得非常长。

方式二:让专业的人做专业的事

以前使用过 Typora 等 md 编辑器,知道 markdown 可以导出各种类型的文件。

我就没必要再重复一次。

PanDoc

Typora 等诸多文件的转换,底层都是使用了 PanDoc

简介

PanDoc is a Haskell library for converting from one markup format to another, and a command-line tool that uses this library.

入门使用

安装

直接 Github 上下载对应的 release 版本。

或者去官网下载。

安装比较简答,不赘述。

测试

$   pandoc -i XXX.md -o XXX.docx

-i 表示输入文件

-o 表示输出文件

其他

Typora

如果你不想使用命令行,可以尝试 Typora

Writage

writage 是一款 office word 插件。

用于 word 和 markdown 之间的转换比较方便。

思考

不忘初心

本来想写一个文档,总是被各种技术和眼界限制。

觉得最初的目的不要忘记了。

核心竞争力

自己把各种都实现,其实是 ROI 很低的一件事情。

专业的事情已经有人做了,我们只需要使用即可。

社会分工协作,方能完成大事。

Windows 使用

安装

pandoc -h

有提示说明安装成功。

pandoc 添加到 path

rcc不是内部或外部命令 搜索下rcc.exe二进制文件的位置, 然后将该路径添加到path环境变量中。

在cmd中输入path,显示当前的环境变量。

然后

path = %path%;C:\Program Files\Pandoc;

回车即可。

测试

λ pandoc -i "D:\_github\write\blogs\比 spring BeanUtils 性能更好的属性拷贝框架.md" -o "D:\_github\write\blogs\比 spring
 BeanUtils 性能更好的属性拷贝框架.pdf"
pdflatex not found. Please select a different --pdf-engine or install pdflatex

缺少 pdflatex

bat 脚本乱码

bat脚本在批处理的时候被经常用到,但是有时候不正确的使用,会导致在bat脚本中的中文,运行起来的时候显示为乱码,这个让人很不爽,下面分享下自己解决这个问题的方法。

好吧,其实造成这个问题的原因很简单。

编辑批处理文件时,以ANSI方式编辑即可。若以别的方式(如UTF-8)编辑了批处理,转换成ANSI格式即可。

windows自带的记事本保存文件时即可选择编码方式

可以看到中文都可以显示正常了。

java 执行

String cmd = String.format("C:\\Program Files\\Pandoc\\pandoc -i \"%s\" -o \"%s\"",
                    original, target);
System.out.println(cmd);
Runtime.getRuntime().exec(cmd);

循环生成代码

package com.github.houbb.test;

import com.lowagie.text.DocumentException;
import com.qkyrie.markdown2pdf.internal.exceptions.ConversionException;
import com.qkyrie.markdown2pdf.internal.exceptions.Markdown2PdfLogicException;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * <p> project: markdown-transfer-Main </p>
 * <p> create on 2019/12/29 11:01 </p>
 *
 * @author Administrator
 * @since 1.0.0
 */
public class Main {

    public static void main(String[] args) throws Markdown2PdfLogicException, ConversionException, IOException, DocumentException {
        List<String> stringList = getFiles();
        for(String md : stringList) {
            if(md.endsWith("md")) {
                execute(md);
            }
        }
    }

    public static void execute(final String path) {
        try {
            final String dirPath = "D:\\_github\\write\\blogs\\";
            String original = dirPath+path;
            String target = dirPath+path.split("\\.")[0]+".docx";
            String cmd = String.format("C:\\Program Files\\Pandoc\\pandoc -i \"%s\" -o \"%s\"",
                    original, target);

            System.out.println(cmd);
            Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static List<String> getFiles() {
        final String dirPath = "D:\\_github\\write\\blogs\\";

        File dir = new File(dirPath);

        File[] files = dir.listFiles();

        List<String> stringList = new ArrayList<>(files.length);

        for(File file : files) {
            stringList.add(file.getName());
        }

        return stringList;
    }

}