Spanish Solved - Cómo puedo leer un PDF almacenado en Binario de una BBDD y grabar en archivo PDF

Ender1969

Member
Licensed User
A ver si me podéis echar una mano.

Tengo en una base de datos almacenado en un binario (BLOB) un pdf, y quiero leerlo para grabarlo en un archivo directamente. Estoy haciendo esto pero el archivo resultante no funciona.
B4X:
    Dim b() As Byte = Cursor.GetBlob("BINARIO1")

    Dim out As OutputStream = File.OpenOutput(Main.DirectorioDeTrabajo,"Ficheropdf.pdf",True)
    out.WriteBytes(b, 0, b.Length)
    out.Close
 

drgottjr

Expert
Licensed User
Longtime User
¿qué significa - precisamente - "no funciona"? aparte de no estar recomendado guardar un archivo .pdf dentro de una base de datos, lo que pretendes hacer sí funciona. al menos no tengo problema. puede que haya errores en otra parte de tu código.
 

Ender1969

Member
Licensed User
¿qué significa - precisamente - "no funciona"? aparte de no estar recomendado guardar un archivo .pdf dentro de una base de datos, lo que pretendes hacer sí funciona. al menos no tengo problema. puede que haya errores en otra parte de tu código.
Independientemente de la recomendación... (leo una BBDD ya creada con otra versión)

Sí, el fichero se crea, es decir "Ficheropdf.pdf"
Pero no es legible, no puedo abrir el pdf generado el S.O da error (windows), a eso me refiero que no funciona.
¿Tendría que hacer algún otro paso?
A mi entender el binario se crea en el fichero tal y como está almacenado...

Espero haberme explicado mejor
 
Last edited:

drgottjr

Expert
Licensed User
Longtime User
con respecto al codigo visto, hago lo mismo que tu.
al archivo resultante le doy 2 clics (in windows), y
adobe reader lo abre, lo lee y lo muestra como el
.pdf que es.


tomo un archivo .pdf y saco los bytes (file.readbytes()) a
una matriz de byte. inserto la matriz en una columna blob
de una db sqlite. luego saco la columna iqual que tu.

bytes sacados son bytes metidos (como dices). lo unico que puedo
sugerir es que el archivo original este corrupto o la insercion
fracasada. (otra cosa se me ocurre: tu blob es base64, no binario.
al sacar lo como byte(), no tendra sentido)
 
Last edited:

Ender1969

Member
Licensed User
con respecto al codigo visto, hago lo mismo que tu.
al archivo resultante le doy 2 clics (in windows), y
adobe reader lo abre, lo lee y lo muestra como el
.pdf que es.


tomo un archivo .pdf y saco los bytes (file.readbytes()) a
una matriz de byte. inserto la matriz en una columna blob
de una db sqlite. luego saco la columna iqual que tu.

bytes sacados son bytes metidos (como dices). lo unico que puedo
sugerir es que el archivo original este corrupto o la insercion
fracasada
Pues tienes toda la razón, (Como no se me ha ocurrido que la BBDD llegaba corrupta)

Gracias
 

drgottjr

Expert
Licensed User
Longtime User
he actualizado my respuesta al mismo momento que tu contestabas. averigua si tu blob es binario o base64. si bytes son bytes, blob es blob. no tiene que ser binario.
(a proposito, no quiero decir que un blob no es binario (todos los campos de una db son binarios - constan todos de bytes, no?) pero un blob es un tipo que puede representar cualquier tipo de datos, segun los deseos del desarrollador.)
 
Last edited:

Ender1969

Member
Licensed User
pues no veo si es Base64

B4X:
CREATE TABLE "DEF" (
    "NUMERO"    INTEGER,
    "BINARIO1"    BLOB
);

Voy a intentar transformarlo... a ver si así lo lee
 

drgottjr

Expert
Licensed User
Longtime User
no digo que tu blob sea base64; lo sugiero. dicho esto, he convertido un archivo .pdf a base64 y he insertado esto a una columna blob. luego, al sacar el blob si intento guardarlo a un .pdf no se puede leer. pero si convierto el blob a bytes y los guardo como .pdf, se lee perfectamente...
 

Ender1969

Member
Licensed User
no digo que tu blob sea base64; lo sugiero. dicho esto, he convertido un archivo .pdf a base64 y he insertado esto a una columna blob. luego, al sacar el blob si intento guardarlo a un .pdf no se puede leer. pero si convierto el blob a bytes y los guardo como .pdf, se lee perfectamente...
Bueno, solucionado,
He probado con otra bbdd distinta y el problema es que la que usaba de pruebas el blob estaba corrupto, con una distinta funciona correctamente.

Gracias drgottjr, por abrirme los ojos.
 
Top