Извлечение OLE-объекта (pdf) из БД Access - PullRequest
5 голосов
/ 23 июня 2009

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

Ответы [ 2 ]

4 голосов
/ 23 июня 2009

Я наконец-то получил код, работающий на то, что я хочу. Хитрость заключается в том, чтобы определить, какая часть является заголовком 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.

1 голос
/ 23 июня 2009

OLEtoDisk

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

http://lebans.com/oletodisk.htm

...