从Access DB中提取OLE对象(pdf)

我们正在将几个旧的Access数据库升级/转换为MS-SQL。 其中许多数据库都具有存储PDF文件的OLE对象字段。 我正在寻找一种方法来提取这些文件并将它们存储在我们的SQL数据库中。 我已经看到类似的问题,回答你如何使用图像文件(jpg,bmp,gif等),但我还没有找到适用于PDF的方法。

我终于得到了一些代码,我想要它做什么。 诀窍是确定哪个部分是OLE标头并删除它。 这是适合我的(基于此处的代码)

public static byte[] StripOleHeader(byte[] fileData) { const string START_BLOCK = "%PDF-1.3"; int startPos = -1; Encoding u8 = Encoding.UTF7; string strEncoding = u8.GetString(fileData); if (strEncoding.IndexOf(START_BLOCK) != -1) { startPos = strEncoding.IndexOf(START_BLOCK); } if (startPos == -1) { throw new Exception("Could not find PDF Header"); } byte[] retByte = new byte[fileData.LongLength - startPos]; Array.Copy(fileData, startPos, retByte, 0, fileData.LongLength - startPos); return retByte; } 

请注意,这仅适用于PDF文件。

OLEtoDisk

“此版本将包含OLE对象的表的全部内容保存到磁盘。不需要用作OLE服务器的原始应用程序来插入对象。支持所有MS Office文档,PDF,MS照片编辑器插入的所有图像,MS Paint和Paint Shop Pro。还支持提取包括原始文件名的PACKAGE类。包含生成OLE字段的完整清单的函数,包括LINKED路径和文件名。使用结构化存储API来读取字段的实际内容“

http://lebans.com/oletodisk.htm