Estamos actualizando/convirtiendo varias bases de datos antiguas de Access a MS-SQL. Muchas de estas bases de datos tienen campos OLE Object que almacenan archivos PDF. Estoy buscando una forma de extraer estos archivos y almacenarlos en nuestra base de datos SQL. He visto preguntas similares que explican cómo se puede hacer esto con los archivos de imagen (jpg, bmp, gif, etc.), pero no he encontrado una manera que funcione con PDF.Extraiga Objeto OLE (pdf) de Access DB
Respuesta
Finalmente obtuve un código que funciona para lo que quiero que haga. El truco consiste en determinar qué parte es el encabezado OLE y eliminarlo. Aquí está lo que funciona para mí (sobre la base de código que se encuentra 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;
}
Tenga en cuenta que esto sólo funciona para archivos PDF.
OLEtoDisk
"Esta versión guarda todo el contenido de una tabla que contiene los objetos OLE en el disco. No requiere la aplicación original que sirvió como el servidor OLE para insertar el objeto. Soporta todos los documentos de MS Office, PDF, Todas las imágenes insertadas por MS Photo Editor, MS Paint y Paint Shop Pro. También admite 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, incluidos LINKED path y Filenames. Utiliza las API de almacenamiento estructurado para leer contenido real del campo "
He visto (e intenté) eso. Funciona para extraer los archivos PDF, pero estoy tratando de encontrar algo que pueda integrar en mi propio código (C#). Algunos de estos DB de acceso tienen más de 4 columnas que almacenan archivos PDF y, en última instancia, solo quiero copiar el archivo en una tabla en nuestro servidor SQL con todos los demás datos. – Nate
Ah, nunca dijiste que estabas buscando el código C#. –
- 1. ADO.NET Entity Framework con OLE DB Access Data Source
- 2. Extraiga las tablas en PDF mediante programación
- 3. Búsqueda de Windows usando OLE DB SQL Fields
- 4. ADOX OLE DB de pasos múltiples generó errores
- 5. Importación de MS ACCESS DB a mySql?
- 6. ¿Funciona EntityFramework contra Access 2007 db (.accdb)?
- 7. Loading Access DB Table to Datatable
- 8. jQuery access Objeto JSON
- 9. Extraiga texto e imágenes de PDF utilizando iText5
- 10. Extraiga nombres de campos de formularios PDF de un formulario PDF
- 11. Extraiga la imagen del PDF utilizando .Net C#
- 12. No se puede inicializar el objeto de origen de datos del proveedor OLE DB "MSDASQL" para el servidor vinculado "(nulo)"
- 13. Conexión de Excel oledb al acceso de bloqueo de base de datos Ms-Access db
- 14. MS Access: Determine el tipo de objeto
- 15. Valor de retorno de SSIS del Procedimiento almacenado dentro de un comando OLE DB
- 16. Consultar hoja de cálculo de Excel con C# .NET sin usar Jet OLE DB
- 17. ¿Cómo soluciono los errores de operación OLE DB de múltiples pasos en SSIS?
- 18. ¿Cómo resolver los problemas de asignación de parámetros de consulta SQL al usar el proveedor OLE DB de Oracle?
- 19. Access DB update one table with value from another
- 20. Convirtiendo MS Access "Objetos OLE" a JPEG simples: ¿la mejor manera?
- 21. COM/OLE/ActiveX/IDispatch confusion
- 22. No se puede obtener una fila del proveedor OLE DB "BULK" para el servidor vinculado "(nulo)"
- 23. ¿Por qué Microsoft no admite conexiones OLE DB a SQL Azure?
- 24. Mangosta: insertando objeto JS directamente en db
- 25. Obtener el título de la aplicación desde un objeto de aplicación OLE de Word
- 26. Extraiga la tabla de DOCX
- 27. Extraiga errores estándar de glm
- 28. Extraiga un rango de NSArray
- 29. Extraiga el texto de las URL con TIKA
- 30. ¿Cómo puedo descubrir programáticamente las propiedades y métodos de un objeto Win32 :: OLE en Perl?
Dado que esta es una respuesta anterior, este código funcionó para mí, solo tuve que actualizar el "% PDF-1.3" a "% PDF-1.7" y fue capaz de eliminar correctamente el encabezado. Curiosamente, funcionó tan bien solo buscando "% PDF" ... – Arthurdent510