R�cup�rer des images � partir d'un document Word .docx

Sc�nario

Cet article vous apprend � composer une application Web ASP.NET pour r�cup�rer toutes les images d’un document au format Microsoft Docx.

Pr�parer l’application Web ASP.NET

� l�aide de Visual Studio, composez une application Web ASP.NET Core simple avec Razor Pages. � l’aide de NuGet Package Manager, r�f�rez-vous � deux packages pour votre projet�: Aspose.Zip pour la d�compression et Aspose.Imaging pour la v�rification de l’image.
Recherchez la page � Index.cshtml � dans votre Explorateur de solutions. Maintenant, ajoutez un formulaire � cette page avec l’attribut enctype="multipart/form-data" dans la balise <form>. Il fallait transf�rer le document Word vers le serveur Web. Ensuite, ajoutez un champ de saisie de type � fichier � pour le fichier docx t�l�charg�. Voici le balisage HTML complet du formulaire�:

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>

Les attributs ��Accepter�� ont �t� ajout�s pour la commodit� de l’utilisateur.

Structure Docx

Docx documet est lui-m�me une archive zip. S’il contient des images int�gr�es, elles se trouvent dans le dossier � word/media � apr�s l’extraction. Ainsi, l’utilisateur fournit le fichier docx et soumet le formulaire. C�t� serveur, nous devons composer une m�thode OnPost appropri�e pour la source Index.cshtml.cs. Dans cette m�thode, nous extrayons l’archive zip en utilisant le constructeur appropri�. Voici le brouillon de la m�thode :

 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    }

Mod�le de page et rendu d’image

Apr�s l’extraction, nous devons v�rifier que l’entr�e extraite est bien une image. Pour cela, nous pouvons utiliser la m�thode Image.CanLoad. S’il approuve l’image valide, nous devons en stocker des octets dans le mod�le de page pour restituer cette image. Ajoutez la propri�t� public List<byte[]> ImageBytes { get; ensemble priv�; }IndexModel. Nous remplissons cette liste avec les octets d�images extraits. Pour les afficher sur la page Web, nous utilisons data URI avec conversion des octets d’image en cha�ne base64. Voici un code Razor de rendu sur 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    }

R�ponse finale

Alors, mettez tout cela ensemble. Chaque entr�e de l’archive a �t� d�compress�e, puis une image compos�e � partir de ces octets.
Nous ne validons pas le fichier utilisateur dans cet exemple. Dans les applications r�elles, vous devez v�rifier une archive t�l�charg�e et son contenu.
Vous trouverez ci-dessous la m�thode finale OnPost.

 1public void OnPost (IFormFile fichier tlcharg)
 2{
 3    ImageBytes = new List<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.