我正在拦截richtextbox的粘贴事件,以便在粘贴之前处理内容。如果它包含表格或图像等我需要做一些自定义的东西。如果复制的选择来自Word 2010并且由混合内容(例如,文本和表格/图像)组成,则Word将内容以多种格式放置在剪贴板上。这些包括HTML和RTF,但我宁愿使用WordML。我使用ClipSpy检查实际放在剪贴板上的格式和数据,“嵌入源”格式似乎是包含WordML的格式。我认为这可以作为一个包打开:
var stream = Clipboard.GetData("Embed Source") as MemoryStream;
var package = Package.Open(stream);
它抛出一个EndOfStreamException,我认为migth被包装在其他东西中。我可以将流写入磁盘并使用7-zip打开它,看看内容是否符合预期。 基本上两个问题: “嵌入源”是否是正确的DataObject来获取WordML? 如果是,我该如何反序列化呢?
答案 0 :(得分:1)
将流保存到磁盘并与正确的docx进行二进制比较后,我发现它实际上已包含在复合文档文件中:http://www.openoffice.org/sc/compdocfileformat.pdf。我用谷歌搜索了前几个字节
D0 CF 11 E0 A1 B1 1A E1
这是CDF格式的标识符。
可以使用OpenMCDF从Compound文件中提取包。