在上一节中,我们完成了基本设置。应该说至少对我来说,目前的功能基本够用了。
所以我打算从这篇文章开始,我不会用Word来编辑,而是用我的个人日记软件来编辑,实际验证一下是否实用。
如下图,这是我之前教程的写作模式:
我之前已经解释过了,在word文档中编辑,只要是包含图片的,复制粘贴到标题中是无法成功的,需要一张一张地粘贴图片。如果遇到一个gif动画,从word复制只能复制静态截图,还得再次复制原文件才能粘贴到头条编辑器中,操作起来比较麻烦。
所以我试着在我的程序里复制粘贴,发现和word有一样的效果。这个对我来说不实际,需要改革。
要解决这个问题,首先要分析为什么会出现这种情况。我们用的文本编辑控件是RichTextBox,默认是rtf格式,和word一样。我们将图文并茂的内容粘贴到word文档中,图片可以正常显示。这说明Ctrl C的内容是rtf格式的,不是通过浏览器粘贴就能识别的格式。那么浏览器能识别的格式是不是每个浏览器都是唯一的呢?于是我尝试在FireFox中复制图片和文字,粘贴到Chrome中打开的头条编辑器中,发现图片是可以显示的,所以可以排除上面的猜测。那么这个格式到底是什么呢?我需要截取程序中粘贴的内容。在ContentManagerForm.cs文件中,添加一个键盘拦截事件来拦截Ctrl V:
我们发现,如果在浏览器中按Ctrl+C,在软件中按Ctrl+V,就可以得到以DataFormats.Html为参数的值。值的内容是这样的:
前面的红线相当于消息头,定义了一些参数。我们刚刚复制的内容来自div。我把这些内容原封不动地写回剪贴板,然后在浏览器里按Ctrl V,浏览器就能正常显示了。
这样我们就基本理解了,和浏览器正常通信需要两步:第一步是把rtf格式转换成html格式,第二步是把html转换成浏览器可以识别的格式到剪贴板。
编码。register provider(codepagesenscodingprovider。实例);
stringhtml=RtfPipe。Rtf.ToHtml(tbxMainBody。rtf);
这样,两行代码实现了转换的第一步。
按钮处理代码:
privatewidbtncopyashhtml _ Click(object sender,EventArgse){Encoding。register provider(codepagesenscodingprovider。实例);stringhtml=RtfPipe。Rtf.ToHtml(tbxMainBody。rtf);剪贴板助手。CopyToClipboard(html,' ');}在使用类库的基础上,三行代码完成了我想要的功能。
功能演示:
以上解决了从软件到头条的复制问题。
还有一种场景是以浏览器为源,将浏览器中的功能复制到软件中。如果RichEdit编辑器自带纯文本,如果是图文混排,需要从html转换成rtf。我找了相关的类库。好像没有rftpipe这样直接支持字符转换的免费库,很多都是通过文档转换的,而且还是收费的。我终于找到了一个符合要求的。所以这个项目比较老,是在框架下开发的,不支持。netcore。
鉴于很难找到合适的库,我仔细分析了需求。其实这种从浏览器复制图文到软件的场景对我来说意义不大。全文抄下来是不可能的。真的要把关键位置的文字抄下来摘抄。只拍一张截图,所以这个功能暂时搁置。
这个小项目用教程完成了24节,终于有点实际效果了:)
-
本教程尽量保证项目源代码已经作为开源项目添加到Gitee中,代码内容会随着教程实时更新。有兴趣的可以关注我获取最新更新。私信:
私人日记可以得到Gitee的链接;
sqlitestudio可以获得sqlitestudio的链接;
菜鸟可以获得新手教程的链接;
QQ群可以获得教程交流Q群号;
如果你不理解或者不喜欢你的阅读,可以在评论区留言。我先记下来,在后续教程中寻找机会。
如果教程有帮助,请关注,转发,传播。能不能开专栏需要你的支持!
上一篇:红薯和什么搭配成早餐吃
下一篇:形容中国结的成语