Pergunta

Estamos atualizando / converter várias bases de dados Access velho para MS-SQL. Muitos desses bancos de dados têm campos de objeto OLE que armazenar arquivos de PDF. Eu estou procurando uma maneira de extrair esses arquivos e armazená-los em nosso banco de dados SQL. Eu vi perguntas semelhantes que a resposta como você pode fazer isso com arquivos de imagem (JPG, BMP, GIF, etc), mas eu não encontrei uma maneira que funciona com PDF.

Foi útil?

Solução

Eu finalmente tenho algum trabalho de código para o que eu quero que ele faça. O truque é determinar qual parte é o cabeçalho OLE e removê-lo. Aqui está o que está funcionando para mim (com base no código encontrado aqui )

    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;
    }

Note que isto só funciona para arquivos PDF.

Outras dicas

OLEtoDisk

"Esta versão salva todo o conteúdo de uma tabela contendo objetos OLE para o disco. Não requer a aplicação original que serviu como o servidor OLE para inserir o objeto. Suporta todos os documentos do MS Office, PDF, todas as imagens inseridas pelo MS Foto editor, MS Paint e Paint Shop Pro. Também suporta extração de classe pacote incluindo nome do arquivo original. Contém função para produzir um inventário completo do campo OLE incluindo o caminho ligados e nomes de arquivos. Usos estruturado de armazenamento API para ler o conteúdo real do campo"

http://lebans.com/oletodisk.htm

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top