Error al leer documento PDF: PDF header signature not found
Durante esta semana he estado trabajando en un proyecto en el que es necesario determinar cuándo se ha añadido un fichero a un Azure Storage, obtenerlo y leerlo para extraer la información que contiene mediante la URI del mismo.
Los documentos que necesitamos tratar son PDF, para lo que utilizamos el paquete nuget iTextSharp.LGPLv2.Core para .Net Core 2.1. Es aquí donde viene el problema, una vez descargamos el documento obtenemos la excepción "PDF header signature not found" al intentar instanciar la clase PdfReader pasando el stream del documento en cuestión.
A continuación ilustramos el caso comentado con una versión muy simplificada del código:
var storageAccouont = CloudStorageAccount.Parse(connectionString);
var client = storageAccount.CreateCloudBlobClient();
var cloudBlob = new CloudBlockBlob(documentUri, client);
MemoryStream documentStream = new MemoryStream();
await
cloudBlob.DownloadToStreamAsync(documentStream);
try
{
var reader = new PdfReader(documentStream);
...
}
catch (Exception ex) {
}
La razón de que esto ocurra es que cuando obtenemos el
stream desde Azure Storage mediante:
MemoryStream documentStream = new MemoryStream();
await
cloudBlob.DownloadToStreamAsync(documentStream);
dejamos posicionado el stream justo después del contenido
descargado. De ahí que obtengamos el error anteriormente descrito y que el índice se encuentre fuera de rango.
Para corregir esto tendremos que volver a posicionar el
stream al comienzo de este de la siguiente forma:
var storageAccouont = CloudStorageAccount.Parse(connectionString);
var client = storageAccount.CreateCloudBlobClient();
var cloudBlob = new CloudBlockBlob(documentUri, client);
MemoryStream documentStream = new MemoryStream();
await
cloudBlob.DownloadToStreamAsync(documentStream);
try
{
documentStream.Position = 0;
// nos posicionamos al comienzo
var reader = new PdfReader(documentStream);
...
}
catch (Exception ex) {
}
Esta solución se ha obtenido tras leer esta entrada de StackOverflow.
Comentarios
Publicar un comentario