Question

Nous mettons à niveau / convertissons plusieurs anciennes bases de données Access en MS-SQL. Beaucoup de ces bases de données ont des champs d'objet OLE qui stockent des fichiers PDF. Je cherche un moyen d'extraire ces fichiers et de les stocker dans notre base de données SQL. J'ai déjà rencontré des questions similaires sur la manière de procéder avec les fichiers image (jpg, bmp, gif, etc.), mais je n'ai pas trouvé de solution qui fonctionne avec PDF.

Était-ce utile?

La solution

J'ai enfin obtenu du code qui fonctionne pour ce que je veux qu'il fasse. L'astuce consiste à déterminer quelle partie est l'en-tête OLE et à le supprimer. Voici ce qui fonctionne pour moi (basé sur le code trouvé ici )

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

Notez que cela ne fonctionne que pour les fichiers PDF.

Autres conseils

OLEtoDisk

"Cette version enregistre l'intégralité du contenu d'une table contenant des objets OLE sur disque. N'exige PAS que l'application d'origine servant de serveur OLE insère l'objet. Prend en charge tous les documents MS Office, PDF, toutes les images insérées par MS Photo Editor, MS Paint et Paint Shop Pro. Prend également en charge l'extraction de la classe PACKAGE, y compris le nom de fichier d'origine. Contient la fonction pour produire un inventaire complet du champ OLE, y compris le chemin et les noms de fichiers LINKED. Utilise les API de stockage structuré pour lire le contenu réel du champ "

"

http://lebans.com/oletodisk.htm

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top