WPF 使用 Pandoc 把 Markdown 转 Docx

本文告诉大家如何通过 WPF 使用 Pandoc 把 Markdown 转 Docx 文件

在之前有文章使用 Pandoc 把 Markdown 转 Docx但是这里的方法需要每次都调用命令行,本文提供方法封装了命令行,有一个界面可以快速做转换

界面很简单,就不告诉大家如何做出这样的界面了,现在是来解决一些坑

选择文件

从软件界面看到,可以让用户选择需要转换的文件,选择文件可以通过 OpenFileDialog 让用户选择文件

代码语言:javascript
复制
            var pick = new OpenFileDialog
            {
                Multiselect = false,
                Filter = "Markdown文件|*.md"
            };
        if (pick.ShowDialog(this) is true)
        {
            // pick.FileName 是选择的文件
           
        }</code></pre></div></div><p>这里的 Filter 的写法请看openFileDialog的Filter属性设置 - 幕三少 - 博客园</p><p>此外还有 Word 文件需要保存,保存文件可以使用 SaveFileDialog 进行选择</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">            var pick = new SaveFileDialog()
        {
            Filter = &#34;Word文件|*.docx&#34;
        };

        if (pick.ShowDialog(this) is true)
        {
            // pick.FileName 是选择的文件
        }</code></pre></div></div><p>这里 ShowDialog 传入的窗口是当前的窗口</p><h3 id="a0k4d" name="%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9">获取文件的文件夹</h3><p>为了方便用户,在用户输入需要转换的文件的时候就自动添加转换之后的 Word 文件</p><p>这里定义的 MVVM 是使用 lindexi.wpf.Framework 这个库,通过 Nuget 安装</p><p>定义了 ViewModel 类,这个类只有三个属性</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">      public string Markdown
    {
        get =&gt; _markdown;
        set
        {
            _markdown = value;

            try
            {
                Docx = Path.Combine(Path.GetDirectoryName(_markdown),
                    Path.GetFileNameWithoutExtension(_markdown) + &#34;.docx&#34;);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }

            OnPropertyChanged();
        }
    }

    public string Docx
    {
        get =&gt; _docx;
        set
        {
            if (value == _docx)
                return;
            _docx = value;
            OnPropertyChanged();
        }
    }

    public string Pandoc
    {
        get =&gt; _pandoc;
        set
        {
            if (value == _pandoc)
                return;
            _pandoc = value;
            OnPropertyChanged();
        }
    }

    private string _markdown;
    private string _docx;
    private string _pandoc;</code></pre></div></div><p>通过 <code>Path.GetDirectoryName(_markdown)</code> 可以拿到对应的文件的文件夹</p><h3 id="cjg7b" name="%E4%BD%BF%E7%94%A8%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86%E5%99%A8%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6%E5%A4%B9%E9%80%89%E6%8B%A9%E6%8C%87%E5%AE%9A%E6%96%87%E4%BB%B6">使用资源管理器打开文件夹选择指定文件</h3><p>在转换完成之后,让用户的资源管理器打开 Word 所在的文件夹,选择转换的 Word 需要用到下面代码</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">            var argument = &#34;/select, \&#34;&#34; + 文件名 + &#34;\&#34;&#34;;

        Process.Start(&#34;explorer.exe&#34;, argument);</code></pre></div></div><p>我将软件放在 csdn 和 github 可以通过点击下面的网站下载</p><p>使用 Pandoc 把 Markdown 转 Docx-CSDN下载</p><p>软件使用方式 解压缩软件到一个文件夹,双击运行 PandocMarkdown2Docx.exe 然后填写需要转换的文件,点击转换</p><p>代码 https://github.com/lindexi/UWP/tree/master/wpf/PandocMarkdown2Docx</p><p>如果发现代码里面存在任何你觉得需要修改的,请在 github 上新建讨论</p>