Rufen Sie Bilder aus einem .docx-Word-Dokument ab

Szenario

In diesem Artikel erfahren Sie, wie Sie eine ASP.NET-Webanwendung zum Abrufen aller Bilder aus einem Dokument im Microsoft Docx-Format erstellen.

ASP.NET-Webanwendung vorbereiten

Erstellen Sie mit Visual Studio eine einfache ASP.NET Core-Webanwendung mit Razor Pages. Verweisen Sie mithilfe des NuGet Package Manager auf zwei Pakete für Ihr Projekt: Aspose.Zip zur Dekomprimierung und Aspose.Imaging zur Bildüberprüfung.
Suchen Sie in Ihrem Projektmappen-Explorer nach der Seite „Index.cshtml“. Fügen Sie dieser Seite nun ein Formular mit dem Attribut „enctype=“multipart/form-data”“ innerhalb des Tags „

“ hinzu. Es musste ein Word-Dokument auf den Webserver übertragen werden. Fügen Sie dann ein Eingabefeld vom Typ „Datei“ für die hochgeladene DOCX-Datei hinzu. Hier ist das vollständige HTML-Markup für das Formular:

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>

Zur Benutzerfreundlichkeit wurden „Akzeptieren“-Attribute hinzugefügt.

Docx-Struktur

Docx documet ist selbst ein Zip-Archiv. Wenn eingebettete Bilder vorhanden sind, befinden sie sich nach der Extraktion im Ordner „word/media“. Der Benutzer stellt also die DOCX-Datei bereit und sendet das Formular ab. Auf der Serverseite müssen wir eine geeignete „OnPost“-Methode für die Quelle „Index.cshtml.cs“ erstellen. Innerhalb dieser Methode extrahieren wir zip-Archiv mit dem entsprechenden Konstruktor. Hier ist der Entwurf der Methode:

 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    }

Seitenmodell und Bildwiedergabe

Nach der Extraktion müssen wir überprüfen, ob der extrahierte Eintrag tatsächlich ein Bild ist. Zu diesem Zweck können wir die Methode Image.CanLoad verwenden. Wenn das gültige Bild genehmigt wird, müssen wir Bytes davon im Seitenmodell speichern, um das Bild darzustellen. Fügen Sie die Eigenschaft „public List<byte[]> ImageBytes { get;“ hinzu. privates Set; }zuIndexModel`. Wir füllen diese Liste mit extrahierten Bildbytes. Um sie auf der Webseite anzuzeigen, verwenden wir Daten-URI mit Konvertierung von Bildbytes in Base64-String. Hier ist ein Rendering-Razor-Code unter „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    }

Abschließende Antwort

Also, fügen Sie alles zusammen. Jeder Eintrag des Archivs wurde dekomprimiert, dann wurde aus diesen Bytes ein Bild zusammengestellt.
Wir validieren die Benutzerdatei in diesem Beispiel nicht. In realen Anwendungen sollten Sie ein hochgeladenes Archiv und seinen Inhalt überprüfen.
Unten finden Sie die endgültige „OnPost“-Methode.

 1public void OnPost(IFormFile uploadedFile)
 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.