title author date CreateTime categories
WPF 使用 Pandoc 把 Markdown 转 Docx
lindexi
2018-10-23 11:35:47 +0800
2018-10-23 11:14:8 +0800
WPF Pandoc

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

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

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

选择文件

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

            var pick = new OpenFileDialog
{
Multiselect = false,
Filter = "Markdown文件|*.md"
}; if (pick.ShowDialog(this) is true)
{
// pick.FileName 是选择的文件 }

这里的 Filter 的写法请看openFileDialog的Filter属性设置 - 幕三少 - 博客园

此外还有 Word 文件需要保存,保存文件可以使用 SaveFileDialog 进行选择

            var pick = new SaveFileDialog()
{
Filter = "Word文件|*.docx"
}; if (pick.ShowDialog(this) is true)
{
// pick.FileName 是选择的文件
}

这里 ShowDialog 传入的窗口是当前的窗口

获取文件的文件夹

为了方便用户,在用户输入需要转换的文件的时候就自动添加转换之后的 Word 文件

这里定义的 MVVM 是使用 lindexi.wpf.Framework 这个库,通过 Nuget 安装

定义了 ViewModel 类,这个类只有三个属性

      public string Markdown
{
get => _markdown;
set
{
_markdown = value; try
{
Docx = Path.Combine(Path.GetDirectoryName(_markdown),
Path.GetFileNameWithoutExtension(_markdown) + ".docx");
}
catch (Exception e)
{
Debug.WriteLine(e);
} OnPropertyChanged();
}
} public string Docx
{
get => _docx;
set
{
if (value == _docx)
return;
_docx = value;
OnPropertyChanged();
}
} public string Pandoc
{
get => _pandoc;
set
{
if (value == _pandoc)
return;
_pandoc = value;
OnPropertyChanged();
}
} private string _markdown;
private string _docx;
private string _pandoc;

通过 Path.GetDirectoryName(_markdown) 可以拿到对应的文件的文件夹

使用资源管理器打开文件夹选择指定文件

在转换完成之后,让用户的资源管理器打开 Word 所在的文件夹,选择转换的 Word 需要用到下面代码

            var argument = "/select, \"" + 文件名 + "\"";

            Process.Start("explorer.exe", argument);

我将软件放在 csdn 和 github 可以通过点击下面的网站下载

使用 Pandoc 把 Markdown 转 Docx-CSDN下载

软件使用方式 解压缩软件到一个文件夹,双击运行 PandocMarkdown2Docx.exe 然后填写需要转换的文件,点击转换

代码 https://github.com/lindexi/UWP/tree/master/wpf/PandocMarkdown2Docx

如果发现代码里面存在任何你觉得需要修改的,请在 github 上新建讨论

2018-10-23-WPF-使用-Pandoc-把-Markdown-转-Docx的更多相关文章

  1. WPF 使用 Pandoc 把 Markdown 转 Docx

    原文:WPF 使用 Pandoc 把 Markdown 转 Docx 本文告诉大家如何通过 WPF 使用 Pandoc 把 Markdown 转 Docx 文件 在之前有文章使用 Pandoc 把 M ...

  2. 2018.10.23 hdu2476String painter(区间dp)

    传送门 一道挺妙的区间dp. 我们先用区间dp求出第一个串为空串时的最小代价. 然后再加入原本的字符更新答案就行了. 代码: #include<bits/stdc++.h> using n ...

  3. 2018.10.23 hdu4745Two Rabbits(区间dp)

    传送门 区间dp经典题目. 首先断环为链. 然后题目相当于就是在找最大的回文子序列. 注意两个位置重合的时候相当于范围是n,不重合时范围是n-1. 代码: #include<bits/stdc+ ...

  4. 2018.10.23 NOIP训练 Leo的组合数问题(组合数学+莫队)

    传送门 好题. 考察了莫队和组合数学两个知识板块. 首先需要推出单次已知n,mn,mn,m的答案的式子. 我们令f[i]f[i]f[i]表示当前最大值为第iii个数的方案数. 显然iii之后的数都是单 ...

  5. 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)

    传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...

  6. 2018.10.23 vijo1243生产产品(单调队列优化dp)

    传送门 这道单调队列真的有点难写啊. 方程感觉挺简单的. f[i][j]f[i][j]f[i][j]表示在第iii个车间结束前jjj次步骤的最小代价. 然后用单调队列毒瘤优化一下就行了. 代码: #i ...

  7. 2018.10.23 NOIP模拟 “新”的家园(缩图+dijksta/spfa)

    传送门 考试70分骗分写挂了=30分=全场最低. 哎今天230垫底了. 这题出的挺好. 对于非关键点直接缩点. 每次把要查的insertinsertinsert进缩好的图里面跑spfa/dijkstr ...

  8. 2018.10.23 NOIP模拟 行星通道计划(bit)

    传送门 卡常题. 成功卡掉了作死写树套树的zxy. 然而对我的二维bit无能为力. 直接维护两棵bit. bit1[i][j]bit1[i][j]bit1[i][j]表示左端点小于等于iii,右端点小 ...

  9. 2018.10.23 NOIP模拟 战争(并查集)

    传送门 跟bzoj1015: [JSOI2008]星球大战是同一道题啊讲道理. 随便合并一下就能过了. 代码

  10. sequence(2018.10.23)

    建出差分序列,可以发现最早出现的回文串就是答案,自己想想就懂了. \(O(N)\)找出回文串就好了,字符串\(hash\)或者\(manacher\)都能在合法时间内得到答案. #include< ...

随机推荐

  1. Linux 下的mysql+centos7+主从复制

    mysql+centos7+主从复制   MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公 ...

  2. 使用哈工大LTP进行文本命名实体识别并保存到txt

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/broccoli2/article/det ...

  3. Python学习之路10☞面向对象进阶

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(objec ...

  4. Myeclipse自定义注释

    1.设置模板 Windows—Preference—Java—Code Style—Code Templates 图中, Configure generated code and comments中的 ...

  5. iOS 避免循环导入及自定义控件delegate和protocol的相互引用的问题

    在OC中一般来说ClassA同ClassB想要避免重复import的话两种方案 1. 若ClassA.h 头文件中已经导入了ClassB,即#import "ClassB.h" , ...

  6. 2019-8-31-C#-通过-probing-指定-dll-寻找文件夹

    title author date CreateTime categories C# 通过 probing 指定 dll 寻找文件夹 lindexi 2019-08-31 16:55:58 +0800 ...

  7. JAVA内存dump

    # 注意点: # 项目运行的用户 # 使用的jdk版本下的jstack去查看 /opt/jdk1..0_191/bin/jmap -dump:format=b,file=/webser/www/`da ...

  8. 【Objective-C】-空指针和野指针

    一.什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针) 2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0. 下面两个都是空指针 ...

  9. Python基础:11变量作用域和闭包

    一:变量作用域 变量可以是局部域或者全局域.定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域. 全局变量的一个特征是除非被删除掉,否则它们的存活到脚本运行结束,且对于所有的函数, ...

  10. @codechef - BIKE@ Chef and Bike

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 输入 n(n ≤ 22) 个点,m(m ≤ 8000) 个边.每 ...