2009-06-22 6 views
5

Мы обновляем или конвертируем несколько старых баз данных Access в MS-SQL. Многие из этих баз данных имеют поля OLE Object, в которых хранятся файлы PDF. Я ищу способ извлечь эти файлы и сохранить их в нашей базе данных SQL. Я видел похожие вопросы, которые отвечают, как вы можете сделать это с файлами изображений (jpg, bmp, gif и т. Д.), Но я не нашел способ, который работает с PDF.Извлечь OLE-объект (pdf) из Access DB

ответ

4

Наконец-то я получил код для работы над тем, что я хочу. Трюк определяет, какая часть является заголовком OLE и удаляет его. Вот что работает для меня (на основе кода найден here)

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-файлов.

+1

Поскольку это более старый ответ, этот код работал для меня, мне нужно было обновить «% PDF-1.3» до «% PDF-1.7», и он смог правильно вырезать заголовок. Как ни странно, он работал, а просто искал «% PDF» ... – Arthurdent510

1

OLEtoDisk

«Эта версия сохраняет все содержимое таблицы, содержащей объекты OLE на диск. Не требует оригинального приложения, который служил в качестве сервера OLE для вставки объекта. Поддерживает все MS Office документы, PDF, Все изображения, вставленные MS Photo Editor, MS Paint и Paint Shop Pro, также поддерживают извлечение класса PACKAGE, включая исходное имя файла. Содержит функцию для создания полного инвентаря поля OLE, включая путь LINKED и имена файлов. Использует API структурированного хранения для чтения фактическое содержание месторождения «

http://lebans.com/oletodisk.htm

+0

Я видел (и пытался) это. Он работает, чтобы вытащить PDF-файлы, но я пытаюсь найти что-то, что я могу интегрировать в свой собственный (C#) код. Некоторые из этих БД доступа имеют 4+ столбца, в которых хранятся файлы PDF, и в конечном итоге я просто хочу скопировать файл в таблицу на нашем SQL-сервере со всеми другими данными. – Nate

+0

Ах, вы никогда не говорили, что искали код на C#. –