Stiamo aggiornando/convertendo diversi database di Access precedenti in MS-SQL. Molti di questi database contengono campi OLE Object che archiviano i file PDF. Sto cercando un modo per estrarre questi file e memorizzarli 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 il PDF.Estrai oggetto OLE (pdf) da Access DB
risposta
Ho finalmente ottenuto del codice funzionante per quello che voglio che faccia. Il trucco è determinare quale parte è l'intestazione OLE e rimuoverla. Qui è ciò che sta lavorando per me (basato sul codice trovato here)
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;
}
Si noti che questo funziona solo per i file PDF.
OLEtoDisk
"Questa versione consente di risparmiare l'intero contenuto di una tabella contenente oggetti OLE su disco. Non richiede l'applicazione originale che serviva come il server OLE per inserire l'oggetto. Supporta tutti i MS Office documenti, 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 incluso percorso e nomi LINKED. Utilizza API di archiviazione strutturata per leggere il contenuto effettivo del campo "
Ho visto (e provato) quello. Funziona per estrarre i PDF ma sto cercando di trovare qualcosa che possa integrare nel mio codice (C#). Alcuni di questi Access DB hanno 4+ colonne che memorizzano i file PDF e, in definitiva, voglio solo copiare il file in una tabella sul nostro server SQL con tutti gli altri dati. – Nate
Ah, non hai mai detto che cercavi il codice C#. –
Poiché questa è una risposta più vecchia, questo codice ha funzionato per me, ho solo dovuto aggiornare "% PDF-1.3" a "% PDF-1.7" ed è stato in grado di rimuovere correttamente l'intestazione. Stranamente, ha funzionato anche alla ricerca di "% PDF" ... – Arthurdent510