.docx Word 문서에서 이미지 검색
대본
이 문서에서는 Microsoft Docx 형식 문서에서 모든 이미지를 가져오기 위해 ASP.NET 웹 응용 프로그램을 작성하는 방법을 설명합니다.
ASP.NET 웹 애플리케이션 준비
Visual Studio를 사용하여 Razor Pages와 함께 간단한 ASP.NET Core 웹 애플리케이션을 작성합니다.
NuGet 패키지 관리자를 사용하면 프로젝트에 대한 두 가지 패키지, 즉 압축 해제용
Aspose.Zip과 이미지 확인용
Aspose.Imaging을 참조하세요.
솔루션 탐색기에서 Index.cshtml
페이지를 찾으세요. 이제 <form>
태그 내에 enctype="multipart/form-data"
속성을 사용하여 해당 페이지에 양식을 추가하세요. Word 문서를 웹 서버로 전송해야 했습니다. 그런 다음 업로드된 docx 파일에 대해 file
유형의 입력 필드를 추가합니다.
다음은 양식에 대한 전체 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>
사용자 편의를 위해 Accept
속성이 추가되었습니다.
Docx 구조
Docx documet은 zip 아카이브 그 자체입니다. 삽입된 이미지가 있는 경우 추출 후 ‘word/media’ 폴더에 위치합니다. 따라서 사용자는 docx 파일을 제공하고 양식을 제출합니다. 서버 측에서는 Index.cshtml.cs
소스에 대한 적절한 OnPost
메서드를 구성해야 합니다. 이 방법 내에서
적절한 생성자를 사용하여
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
로 변경합니다.
이 목록을 추출된 이미지 바이트로 채웁니다. 웹페이지에 표시하기 위해 이미지 바이트를 base64 문자열로 변환하는
데이터 URI를 사용합니다.
다음은 Index.cshtml
에 있는 렌더링 Razor 코드입니다.
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 = 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}