Frage

Wir aktualisieren / mehrere alten Access-Datenbanken auf MS-SQL zu konvertieren. Viele dieser Datenbanken haben OLE-Objektfelder, die PDF-Dateien speichern. Ich bin auf der Suche nach einer Möglichkeit, diese Dateien und speichern sie in unserer SQL-Datenbank zu extrahieren. Ich habe ähnliche Fragen gesehen, die zu beantworten, wie Sie könnte dies tun, mit Bilddateien (jpg, bmp, gif, usw.), aber ich habe nicht einen Weg, das funktioniert mit PDF.

gefunden
War es hilfreich?

Lösung

Ich habe endlich einen Code arbeiten für das, was ich will, es zu tun. Der Trick besteht darin, zu bestimmen, welchen Teil der OLE-Header ist und entfernt es. Hier ist das, was für mich arbeitet (basierend auf Code gefunden hier )

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

Beachten Sie, dass dies nur für PDF-Dateien funktioniert.

Andere Tipps

OLEtoDisk

"Diese Version den gesamten Inhalt einer Tabelle speichert Objekte auf der Festplatte enthält OLE. Enthält die ursprüngliche Anwendung nicht erforderlich, die als OLE-Server diente das Objekt einfügen. Unterstützt alle Dokumente MS Office, PDF, Alle eingefügten Bilder von MS Photo Editor, MS Paint und Paint Shop Pro. auch unterstützt die Extraktion von PAKET Klasse einschließlich dem ursprünglichen Dateinamen. Enthält Funktion eine vollständige Bestandsaufnahme des Ole-Feldes einschließlich verknüpfter Pfad und Dateinamen zu erzeugen. Verwendet Structured Storage API den eigentlichen Inhalt des Feldes zu lesen“

http://lebans.com/oletodisk.htm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top