前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发一个Word的代码高亮插件

开发一个Word的代码高亮插件

作者头像
明年我18
发布2019-09-18 11:44:09
2K0
发布2019-09-18 11:44:09
举报
文章被收录于专栏:明年我18明年我18

在用Word写技术文档的时候,免不了要在文档中插入一些源代码。为了使插入进来的源代码更可读,就需要使这些代码的关键字高亮显示。所以在写这些文档的时候,我经常需要再开一个Visual Studio,在Visual Studio里编辑好代码之后,复制到Word里面,Word会帮助我们保留代码的格式,达到关键字高亮的效果。

但这样做难免有些不方便,如果能在word中装一个支持代码高亮的插件就好了。在网上搜索无果之后,自己做了一个。

如何开发Word的外接程序是需要解决的第一个问题,可以参考博客园的一个系列:我的VSTO之路,我就是参考着他这个系列做的这个插件,不过目前这个插件只支持Word 2010。

接下来,怎样实现代码高亮?幸好,有一个开源的项目Wilco.SyntaxHighlighting可以解决我的问题。它支持多种语言的Highlighter,并提供Html和Rtf两种格式的parser把Highlighter的code转换为html或rtf的格式。

最后,怎样把高亮后的代码插入到Word中?由于Word的插件开发不是我研究的重点,所以想了一个比较懒的做法,即把html格式或rtf格式的高亮代码复制到剪贴板上,然后利用_Application.Selection.Paste方法粘帖进来,代码如下:

代码语言:javascript
复制
private void button1_Click(object sender, RibbonControlEventArgs e)
代码语言:javascript
复制
{
代码语言:javascript
复制
    var dialog = new MainForm();
代码语言:javascript
复制
    if(dialog.ShowDialog() == DialogResult.OK)
代码语言:javascript
复制
    {
代码语言:javascript
复制
        dialog.CopyToClipboard();
代码语言:javascript
复制
        Globals.ThisAddIn.Application.Selection.Paste();
代码语言:javascript
复制
    }
代码语言:javascript
复制
}

插件的效果如下。

Word功能区:

image
image

点设置按钮弹出设置界面,支持Rtf和Html两种格式,还可以设置边框、背景、交替行等样式,不过我比较懒,没去研究怎么在Rtf格式下设置边框、背景,所以在Rtf格式下是不支持边框颜色、背景颜色和交替行的。所以建议大家选择Html格式。设置界面如下图:

image
image

点击插入代码按钮,会弹出插入代码的界面,如下图:

image
image

可以选择C#、Java、Xml、Javascript等多种语言。

一些效果如下:

代码语言:javascript
复制
//no style
代码语言:javascript
复制
private void button1_Click(object sender, RibbonControlEventArgs e)
代码语言:javascript
复制
{
代码语言:javascript
复制
    var dialog = new MainForm();
代码语言:javascript
复制
    if(dialog.ShowDialog() == DialogResult.OK)
代码语言:javascript
复制
    {
代码语言:javascript
复制
        dialog.CopyToClipboard();
代码语言:javascript
复制
        Globals.ThisAddIn.Application.Selection.Paste();
代码语言:javascript
复制
    }
代码语言:javascript
复制
}
代码语言:javascript
复制
  1: //框 + 行号
代码语言:javascript
复制
  2: private void button1_Click(object sender, RibbonControlEventArgs e)
代码语言:javascript
复制
  3: {
代码语言:javascript
复制
  4:     var dialog = new MainForm();
代码语言:javascript
复制
  5:     if(dialog.ShowDialog() == DialogResult.OK)
代码语言:javascript
复制
  6:     {
代码语言:javascript
复制
  7:         dialog.CopyToClipboard();
代码语言:javascript
复制
  8:         Globals.ThisAddIn.Application.Selection.Paste();
代码语言:javascript
复制
  9:     }
代码语言:javascript
复制
 10: }
代码语言:javascript
复制
  1: //框 + 行号 + 交替行
代码语言:javascript
复制
  2: private void button1_Click(object sender, RibbonControlEventArgs e)
代码语言:javascript
复制
  3: {
代码语言:javascript
复制
  4:     var dialog = new MainForm();
代码语言:javascript
复制
  5:     if(dialog.ShowDialog() == DialogResult.OK)
代码语言:javascript
复制
  6:     {
代码语言:javascript
复制
  7:         dialog.CopyToClipboard();
代码语言:javascript
复制
  8:         Globals.ThisAddIn.Application.Selection.Paste();
代码语言:javascript
复制
  9:     }
代码语言:javascript
复制
 10: }

我这篇文章就是用Word写的,上面这些代码也是用我做的这个插件插进来的。但就当我兴高采烈的用Word把这篇文章发布到博客园之后,才发现发布后的上述代码段出现了不同程度的变形,而且是无法接受的变形,如下图:

image
image

可以看到,边框没了,private和void之间空格很大,而且还换行了。这个问题研究了很久和不知道该如何解决,可能Word在发布博文的时候对格式的改变太大,导致了变形。

那如果想把Word写的文章发布到博客上怎么办呢?建议在Word里写好的文章后,把内容复制下来,然后在Windows live writer“选择性粘帖”进去,利用windows live writer来发布博客。

源代码下载

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-06-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档