Отримати зображення з документа .docx Word

Сценарій

Ця стаття навчить вас створювати веб-програму ASP.NET для отримання всіх зображень із документа формату Microsoft Docx.

Підготуйте веб-додаток ASP.NET

Використовуючи Visual Studio, створіть просту веб-програму ASP.NET Core зі сторінками Razor. Використовуючи диспетчер пакетів NuGet, перегляньте два пакунки для свого проекту: Aspose.Zip для декомпресії та Aspose.Imaging для перевірки зображення.
Знайдіть сторінку Index.cshtml у своєму Solution Explorer. Тепер додайте форму до цієї сторінки з атрибутом enctype="multipart/form-data" в тегу <form>. Потрібно було перенести документ Word на веб-сервер. Потім додайте поле введення типу file для завантаженого файлу docx. Ось повна розмітка HTML для форми:

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>

Для зручності користувача додано атрибути «Прийняти».

Структура Docx

Docx documet сам по собі є zip-архівом. Якщо він має будь-які вбудовані зображення, вони розташовані в папці «word/media» після вилучення. Отже, користувач надає файл docx і надсилає форму. На стороні сервера нам потрібно створити відповідний метод OnPost для джерела Index.cshtml.cs. У цьому методі ми витягуємо архів zip за допомогою відповідного конструктора. Ось чернетка методу:

 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    }

Модель сторінки та рендеринг зображення

Після вилучення нам потрібно перевірити, чи витягнутий запис насправді є зображенням. Для цього ми можемо використовувати метод Image.CanLoad. Якщо воно затвердить дійсне зображення, нам потрібно зберегти його байти в моделі сторінки, щоб відобразити це зображення. Додайте властивість public List<byte[]> ImageBytes { get; приватний набір; } до IndexModel. Ми заповнюємо цей список витягнутими байтами зображень. Щоб показати їх на веб-сторінці, ми використовуємо data URI із перетворенням байтів зображення на рядок base64. Ось код візуалізації Razor на 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    }

Завершення відповіді

Отже, з’єднайте все разом. Кожен запис архіву було розпаковано, а потім із цих байтів було складено зображення.
Ми не перевіряємо файл користувача в цьому зразку. У реальних програмах вам слід перевірити завантажений архів і його вміст.
Нижче наведено останній метод OnPost.

 1public void OnPost(IFormFile uploadedFile)
 2{
 3    ImageBytes = новий список<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.