目标:选中一段Word内容后,有表格、图片,浮动签名、图章等多种内容,保存到数据库,在使用的时候,从数据库里调用该内容,显示在Word。
思路:
1、数据库比如SQL,用image类型字段。
2、通过剪贴板获取数据,借助序列化和内存流,转换成二进制类型。
实践:
1、整个过程描述:
剪贴板获取内容,转换二进制,清除剪贴板,二进制赋值给剪贴板,CTRL+V 显示在Word里;
这样调试方便,省略了数据库保存的事情。
2、RTF格式数据二进制存储
2.1、获取选中Word的数据,格式为RTF格式;
Dim words As Object = Clipboard.GetDataObject.GetData(DataFormats.Rtf)
2.2、序列化方式转换成内存流
Dim fm As New BinaryFormatter
Dim ms As New MemoryStream
fm.Serialize(ms, words)
2.3、转换成二进制
ms.Flush()
Dim a As Byte() = ms.ToArray
ms.Close()
3、清除剪贴板
Clipboard.Clear()
4、二进制数据还原
4.1、重建数据流
ms = New MemoryStream
fm = New BinaryFormatter
ms.Write(a, 0, a.Length)
ms.Flush()
ms.Position = 0
4.2、还原复制的Word内容对象
Dim obj As Object = fm.Deserialize(ms)
4.3、重建剪贴板
Clipboard.SetData(DataFormats.Rtf, obj)
5、清理临时变量
ms.Close()
ms = Nothing
words = Nothing
obj = Nothing
fm = Nothing
检测:找一个空白Word文档,Ctrl+V,试试。
说明:从复制开始,到读取数据,清空剪贴板,再重建数据,这中间证明,我们已经完全获得了有效的二进制数据。