Отримати зображення з документа .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}