Pregunta

Estamos actualizando / convirtiendo varias bases de datos de Access antiguas a MS-SQL. Muchas de estas bases de datos tienen campos de objetos OLE que almacenan archivos PDF. Estoy buscando una manera de extraer estos archivos y almacenarlos en nuestra base de datos SQL. He visto preguntas similares que responden cómo puedes hacer esto con archivos de imagen (jpg, bmp, gif, etc.) pero no he encontrado una manera que funcione con PDF.

¿Fue útil?

Solución

Finalmente obtuve un código que funciona para lo que quiero que haga. El truco es determinar qué parte es el encabezado OLE y eliminarlo. Esto es lo que funciona para mí (basado en el código encontrado aquí )

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

Tenga en cuenta que esto solo funciona para archivos PDF.

Otros consejos

OLEtoDisk

" Esta versión guarda todo el contenido de una tabla que contiene objetos OLE en el disco. NO requiere que la aplicación original que sirvió como servidor OLE inserte el objeto. Admite todos los documentos de MS Office, PDF, todas las imágenes insertadas por MS Photo Editor, MS Paint y Paint Shop Pro. También es compatible con la extracción de la clase PACKAGE, incluido el nombre de archivo original. Contiene la función para producir un inventario completo del campo OLE, incluida la ruta VINCULADA y los nombres de archivo. Utiliza API de almacenamiento estructurado para leer el contenido real del campo "

http://lebans.com/oletodisk.htm

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top