从剪贴板获取Word ML

本文关键字:ML Word 获取 剪贴板 | 更新日期: 2023-09-27 18:20:30

我正在拦截richtextbox的粘贴事件,以便在粘贴之前处理内容。如果它包含表格或图像等,我需要做一些自定义的东西。如果复制的选定内容来自Word 2010,并且包含混合内容(例如文本和表格/图像),Word会以多种格式将内容放在剪贴板上。其中包括HTML和RTF,但我更愿意使用WordML。我已经使用ClipSpy来检查剪贴板上实际放置的格式和数据,"嵌入源代码"格式似乎是包含WordML的格式。我认为这可以作为一个包打开:

var stream = Clipboard.GetData("Embed Source") as MemoryStream;
var package = Package.Open(stream);

它抛出了一个EndOfStreamException,我想它可能被其他东西包裹着。我可以将流写入磁盘,然后使用7-zip打开它,看到内容如预期。所以基本上有两个问题:"嵌入源代码"是获取WordML的正确DataObject吗?如果是,我该如何反序列化它?

从剪贴板获取Word ML

在将流保存到磁盘并与正确的docx进行二进制比较后,我发现它实际上被封装在一个复合文档文件中:http://www.openoffice.org/sc/compdocfileformat.pdf.我在谷歌上搜索了最初的几个字节

D0 CF 11 E0 A1 B1 1A E1

其是CDF格式的标识符。

可以使用OpenMCDF从复合文件中提取包。