Рендиране на фигури отделно от документ

При обработката на документи често срещана задача е да извлечете всички изображения, намерени в документа, и да ги експортирате във външно местоположение. Тази задача става лесна с Aspose.Words API, който вече осигурява функционалността за извличане и записване на данни от изображения. Въпреки това понякога може да искате да извлечете по подобен начин други типове графично съдържание, което е представено от различен тип Чертожен обект, например текстово поле, съдържащо абзаци, фигури със стрелки и малко изображение. Няма лесен начин за представяне на този обект, тъй като той е комбинация от отделни елементи на съдържанието. Може също да срещнете случай, когато съдържанието е групирано заедно в обекта, който изглежда като едно изображение.

Aspose.Words осигурява функционалност за извличане на този тип съдържание по същия начин, по който можете да извлечете просто изображение от фигура като рендирано съдържание. Тази статия описва как да използвате тази функционалност за рендиране на фигури независимо от документа.

Форми в Aspose.Words

Цялото съдържание в слоя за чертане на документи е представено от Shape или GroupShape възел в Aspose.Words обекта на документа (DOM). Такова съдържание може да бъде текстови полета, изображения, AutoShapes, OLE обекти и др. Някои полета също се импортират като фигури, например полето INCLUDEPICTURE.

Обикновеното изображение е представено от Shape възел от ShapeType.Image. Този възел на фигура няма дъщерни възли, но данните за изображението, съдържащи се в този възел на фигура, могат да бъдат достъпни от свойството Shape.ImageData. От друга страна, формата може да се състои и от много детски възли. Например фигура на текстово поле, която е представена от свойство ShapeType.TextBox, може да се състои от много възли, като Paragraph и Table. Повечето фигури могат да включват възли на блоково ниво Paragraph и Table. Това са същите възли като тези, които се появяват в основното тяло. Фигурите винаги са части от някой абзац, включени директно в реда или закотвени към Paragraph,, но “плаващи” навсякъде в страницата на документа.

rendering-shapes-separately-from-a-document-aspose-words-cpp-1

Документът може да съдържа и фигури, които са групирани заедно. Групирането може да бъде разрешено в Microsoft Word, като изберете няколко обекта и кликнете върху “групиране” в менюто с десния бутон.

rendering-shapes-separately-from-a-document-aspose-words-cpp-2

В Aspose.Words, тези групи от фигури са представени от GroupShape възел. Те могат да бъдат извикани по същия начин, за да представят цялата група на изображението.

rendering-shapes-separately-from-a-document-aspose-words-cpp-3

Форматът DOCX може да съдържа специални типове изображения, като диаграми или диаграми. Тези форми също са представени чрез Shape възел в Aspose.Words, който също предоставя подобен метод за рендирането им като изображения. По дизайн една фигура не може да съдържа друга фигура като дете, освен ако тази фигура не е изображение (ShapeType.Image). Например Microsoft Word не ви позволява да вмъквате текстово поле в друго текстово поле.

Типовете фигури, описани по-горе, осигуряват специален метод за представяне на фигурите през класа ShapeRenderer. Инстанция на класа ShapeRenderer се извлича за а Shape или GroupShape чрез метода GetShapeRenderer или чрез подаване на Shape към конструктора на класа ShapeRenderer. Този клас осигурява достъп до членове, които позволяват представяне на фигура на следните:

  • Файл на диска с помощта на метода Save претоварване
  • Поток с използване на метода Save претоварване
  • Graphics обект чрез използване на RenderToSize и RenderToScale методи

Рендиране във файл или поток

Методът Save осигурява претоварване, което прави фигура директно към файл или поток. И двете претоварвания приемат инстанция на класа ImageSaveOptions, което позволява дефиниране на опции за рендиране на фигурата. Това работи по същия начин като Document.Save метод. Въпреки че този параметър е необходим, можете да подадете нулева стойност, като посочите, че няма потребителски опции.

Формата може да бъде експортирана във всеки формат на изображението, посочен в SaveFormat изброяване. Например изображението може да бъде представено като растерно изображение, като JPEG чрез посочване на SaveFormat.Jpeg или като векторно изображение, като EMF чрез посочване на SaveFormat.Emf.

Примерът с код по-долу илюстрира превръщането на фигура в изображение EMF отделно от документа и записването на диск:

Примерът с код по-долу илюстрира превръщането на фигура в изображение JPEG отделно от документ и записването в поток:

Клас ImageSaveOptions ви позволява да зададете различни опции, които контролират как се рендира изображението. Функционалността, описана по-горе, може да бъде приложена по същия начин към възлите GroupShape и Shape.

Изобразяване на графичен обект .NET

Рендирането директно към обект Graphics ви позволява да дефинирате свои собствени настройки и състоянието на обекта Graphics. Често срещан сценарий включва рендиране на фигура директно в обект Graphics, извлечен от формуляр Windows или растерна графика. Когато възелът Shape се рендира, настройките ще повлияят на външния вид на фигурата. Например можете да завъртите или мащабирате фигурата с помощта на RotateTransform или ScaleTransform методи за Graphics обект.

Примерът по-долу показва как да направите фигура на фигура .NET Graphics обект отделно от документа и прилагане на въртене към рендираното изображение:

Подобно на метода RenderToSize, методът RenderToSize наследен от NodeRendererBase е полезен за създаване на миниатюри на съдържанието на документа. Размерът на формата се определя от конструктора. Методът RenderToSize приема Graphics обекта, координатите Х и у на позицията на изображението и размера на изображението (ширина и височина), които ще бъдат изтеглени върху Graphics обекта.

Shape може да бъде доведен до определена скала, като се използва ShapeRenderer.RenderToScale метода, наследен от NodeRendererBase класа. Това е подобно на метода Document.RenderToScale, който приема същите основни параметри. Разликата между тези два метода е, че с метода ShapeRenderer.RenderToScale, вместо буквален размер, избирате стойност, която мащабира формата по време на нейното рендиране. Ако стойността на поплавъка е равна на 1.0, формата трябва да бъде 100% от първоначалния си размер. Поплавъчна стойност 0.5 ще намали размера на изображението наполовина.

Рендиране на изображение на фигура

Класът Shape представлява обекти в чертожния слой, като AutoShape, текстово поле, свободна форма, OLE обект, контрола Активекс или картина. Използвайки класа Shape, можете да създавате или променяте фигури в документ Microsoft Word. Важно свойство на формата е ShapeType. Форми от различни типове могат да имат различни възможности в Word документ. Например само изображения и OLE фигури могат да имат изображения в тях, докато повечето от фигурите могат да имат само текст.

Следващият пример показва как да направите изображение на фигура на изображение JPEG отделно от документа и да го запишете на диска:

Извличане на размер на формата

Класът ShapeRenderer също така предоставя функционалност за извличане на размера на фигурата в пиксели чрез метода GetSizeInPixels. Този метод приема два параметъра тип поплавък (единичен) – скалата и DPI, които се използват при изчисляването на размера на формата, когато фигурата се рендира. Методът връща Size обект, който съдържа ширината и височината на изчисления размер. Това е полезно, когато се изисква предварително да се знае размерът на рендираната фигура, например при създаване на Нова растерна графика от рендирания изход.

Примерът по-долу показва как да създадете нов обект с растерна графика и графика с ширината и височината на фигурата, която ще бъде рендирана:

При използване на методите RenderToSize или RenderToScale, рендираният Размер на изображението също се връща в обекта SizeF. Това може да бъде присвоено на променлива и да се използва, ако е необходимо.

Свойство SizeInPoints връща размера на формата, измерен в точки (Виж ShapeRenderer. Резултатът е SizeF обект, съдържащ ширината и височината.