Recuperar im�genes de un documento de Word .docx

Gui�n

Este art�culo le ense�a c�mo crear una aplicaci�n web ASP.NET para recuperar todas las im�genes de un documento en formato Microsoft Docx.

Preparar la aplicaci�n web ASP.NET

Usando Visual Studio, cree una aplicaci�n web ASP.NET Core simple con Razor Pages. Usando el Administrador de paquetes NuGet, consulte dos paquetes para su proyecto: Aspose.Zip para descompresi�n y Aspose.Imaging para verificaci�n de im�genes.
Busque la p�gina Index.cshtml dentro de su Explorador de soluciones. Ahora, agregue un formulario a esa p�gina con el atributo enctype="multipart/form-data" dentro de la etiqueta <form>. Necesitaba transferir un documento de Word al servidor web. Luego, agregue un campo de entrada de tipo “archivo” para el archivo docx cargado. Aqu� est� el marcado HTML completo para el formulario:

1<form method="post" enctype="multipart/form-data">
2    <span>Microsoft *.docx document: </span>
3    <input type="file" name="uploadedFile" required="required" accept=".docx" />   
4    <br />
5    <input type="submit" value="Upload" />
6</form>

Se han agregado atributos “Aceptar” para comodidad del usuario.

Estructura Docx

Docx documet es un archivo zip en s� mismo. Si tiene im�genes incrustadas, se ubican en la carpeta ‘word/media’ despu�s de la extracci�n. Entonces, el usuario proporciona el archivo docx y env�a el formulario. En el lado del servidor necesitamos componer un m�todo OnPost apropiado para la fuente Index.cshtml.cs. Dentro de este m�todo extraemos archivo zip usando el constructor apropiado. Aqu� est� el borrador del m�todo:

 1    public void OnPost(IFormFile uploadedFile) {
 2        using (Archive archive = new Archive(uploadedFile.OpenReadStream())) {
 3            using (Archive archive = new Archive(uploadedFile.OpenReadStream()))
 4            {
 5                foreach (var entry in archive.Entries.Where(e => e.Name.StartsWith(@"word/media", StringComparison.InvariantCultureIgnoreCase)))
 6                {
 7                ...
 8                }
 9            }	
10        }
11    }

Modelo de p�gina y representaci�n de im�genes

Despu�s de la extracci�n, debemos verificar que la entrada extra�da sea en realidad una imagen. Para ello podemos utilizar el m�todo Image.CanLoad. Si aprueba la imagen v�lida, necesitamos almacenar bytes dentro del modelo de p�gina para representar esa imagen. Agregue la propiedad Lista p�blica<byte[]> ImageBytes { get; conjunto privado; } a Modelo de �ndice. Llenamos esta lista con bytes de im�genes extra�das. Para mostrarlos en la p�gina web utilizamos URI de datos con conversi�n de bytes de imagen a cadena base64. Aqu� hay una representaci�n del c�digo Razor en Index.cshtml

1    @{
2    if (Model.ImageBytes != null && Model.ImageBytes.Count > 0) {
3            <h4>Images within document:</h4>
4            foreach (byte[] image in Model.ImageBytes) {
5                <img src="data:image;base64,@Convert.ToBase64String(image)"/>
6            }
7        }
8    }

Respuesta final

As� que ponlo todo junto. Se ha descomprimido cada entrada del archivo y luego se ha creado una imagen a partir de estos bytes.
No validamos el archivo de usuario en esta muestra. En aplicaciones del mundo real, debes verificar un archivo cargado y su contenido.
A continuaci�n se muestra el m�todo OnPost final.

 1pblico vaco OnPost (IFormFile uploadedFile)
 2{
 3    ImageBytes = nueva Lista<byte[]>();
 4
 5    using (Archive archive = new Archive(uploadedFile.OpenReadStream()))
 6    {
 7        foreach (var entry in archive.Entries.Where(e => e.Name.StartsWith(@"word/media", StringComparison.InvariantCultureIgnoreCase)))
 8        {
 9            using (MemoryStream extracted = new MemoryStream())
10            {
11                entry.Open().CopyTo(extracted);
12                extracted.Seek(0, SeekOrigin.Begin);
13
14                if (Aspose.Imaging.Image.CanLoad(extracted))
15                    ImageBytes.Add(extracted.ToArray());
16             }
17         }
18     }
19}
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.