PDA

Ver la Versión Completa : Saber si un pdf es realmente pdf


santiago14
28-01-2014, 17:27:55
Buenas, estoy haciendo una pequeña aplicación donde necesito saber si el pdf que levantan a una ventana de la aplicación es verdaderamente un pdf. Sabemos que a un archivo le podemos cambiar su extesión y listo, Delphi ya me la agarra. Pero resulta que luego no es del tipo que esperábamos.
La cuestión es: ¿Cómo hago para asegurar que el archivo que me están subiendo es realmente pdf?

He preguntado lo mismo en otro sub-foro pero con jpg's, tal vez la forma sea igual ¿o no?

Gracias.

ecfisa
28-01-2014, 22:33:14
Hola santiago14.


function IsPDFFile(aFileName: TFileName): Boolean;
var
Buf: array[0..3] of byte;
Stream: TFileStream;
begin
with TFileStream.Create(aFileName, fmOpenRead) do
try
Read(Buf, SizeOf(Buf));
Result:= (Buf[0]=$25) and (Buf[1]=$50) and (Buf[2]=$44) and (Buf[3]=$46);
finally
Free;
end;
end;


Saludos :)

santiago14
29-01-2014, 00:55:56
Gracias compañero, creo que el mismo criterio puede ser usado para analizar la cabecera de un jpg.
Si bien con esto no puedo saber si un archivo está corrupto o no, puedo saber si es un jpg del bueno. Eso es un gran avance.

Gracias de nuevo.

ecfisa
29-01-2014, 05:55:20
Hola santiago14.

Así es, con las modificaciones corresponidentes te serviría para evaluar cualquier firma.

Aprovecho a mencionarte que la declaración de la variable Stream, es innecesaria (me quedó de la prueba :o )

Saludos :)

Neftali [Germán.Estévez]
29-01-2014, 11:17:05
Iba a decir que lo cargaras como texto y comprobaras la cabecera, que siempre es similar e incluye número de versión, pero veo que es lo mismo que hace el procedimiento de ecfisa.

Encontrarás cosas como, %PDF-1.2, %PDF-1.4,...