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. shell脚本批量杀死进程

    使用Ubuntu系统时常会遇到机器卡死的情况(人生最大的痛苦),所有的键都没有用,只好强制关机,我似乎对此已经'乐此不疲了'. 看到又神牛说: 可以在tty里面把相关的进程杀死,之后就正常.(到目前我 ...

  2. 散列表(Hash Table)

    散列表(hash table): 也称为哈希表. 根据wikipedia的定义:是根据关键字(Key value)而直接访问在内存存储位置的数据结构.也就是说,它通过把键值通过一个函数的计算,映射到表 ...

  3. AtCoder Regular Contest 094 D Worst Case【思维题】

    https://arc094.contest.atcoder.jp/tasks/arc094_b 题意: 在2次超多人的比赛中,你取得的成绩依次为第A名和第B名.一个人的成绩为a和b时,当且仅当ab& ...

  4. 找顺数【数位dp】

    输出1到n中含有6的数的个数. 样例输入 100 样例输出 19 找规律感觉好难想(好像是什么100以内有19个,200以内有19*2个,600以内115个,700以内214个...,1000以内有2 ...

  5. Nuxt.js打造旅游网站第1篇_项目环境搭建

    1. 安装 使用官网提供的脚手架工具 create-nuxt-app,创建一个nuxtjs项目. npx create-nuxt-app xianyun 注意:在NPM版本5.2.0默认安装了npx, ...

  6. 不撞南墙不回头———深度优先搜索(DFS)Oil Deposits

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. Java练习 SDUT-1230_平方和与立方和

    平方和与立方和 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇 ...

  8. 从DataTable中删除不被控件支持的字段类型

    DataTable dt = DB.GetDataTable(sql);                        //从dt中删除不被控件支持的字段类型            for (int ...

  9. Laravel5.5 支付宝手机网站支付的教程

    https://segmentfault.com/a/1190000015559571 这篇文章主要介绍了Laravel5.5 支付宝手机网站支付的教程,小编觉得挺不错的,现在分享给大家,也给大家做个 ...

  10. xUtils框架的介绍(三)

    接上回,继续介绍xUtils的最后两个模块:DbUtils和HttpUtils.首先先介绍第一个SQLite数据库操纵的简单ORM框架,只要能理解xUtils为我们提供的api,相信你也能熟练的把Db ...