Domanda

Stiamo aggiornando / convertendo diversi vecchi database di Access in MS-SQL. Molti di questi database hanno campi OLE Object che memorizzano file PDF. Sto cercando un modo per estrarre questi file e archiviarli nel nostro database SQL. Ho visto domande simili che rispondono a come potresti farlo con i file di immagine (jpg, bmp, gif, ecc.) Ma non ho trovato un modo che funzioni con PDF.

È stato utile?

Soluzione

Finalmente ho ottenuto del codice funzionante per quello che voglio che faccia. Il trucco è determinare quale parte è l'intestazione OLE e rimuoverlo. Ecco cosa funziona per me (basato sul codice trovato qui )

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

Nota che funziona solo con file PDF.

Altri suggerimenti

OLEtoDisk

" Questa versione salva l'intero disco di una tabella contenente oggetti OLE. NON richiede l'applicazione originale che fungeva da server OLE per inserire l'oggetto. Supporta tutti i documenti MS Office, PDF, Tutte le immagini inserite da MS Photo Editor, MS Paint e Paint Shop Pro. Supporta anche l'estrazione della classe PACKAGE incluso il nome file originale. Contiene la funzione per produrre un inventario completo del campo OLE, inclusi percorso LINKED e nomi dei file. Utilizza le API di archiviazione strutturata per leggere il contenuto effettivo del campo "

http://lebans.com/oletodisk.htm

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top