Оформление форм Отдельно от документа

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

Aspose.Words Предоставляет функциональность для извлечения этого типа контента таким же образом, как вы можете извлечь простое изображение из формы. В этой статье описывается, как использовать эту функциональность для отображения форм независимо от документа.

Типы форм в Aspose.Words

Все содержимое в слое чертежа документа представлено Shape или GroupShape Узел в узле Aspose.Words Модуль объекта документаDOM). Таким контентом могут быть текстовые поля, изображения, автоформы, объекты OLE и т.д. Некоторые поля также импортируются в качестве форм, например INCLUDEPICTURE поле.

Простое изображение представлено a Shape узел ShapeType.Image. Этот узел формы не имеет дочерних узлов, но данные изображения, содержащиеся в этом узле формы, могут быть доступны через Shape.ImageData собственность. С другой стороны, форма также может состоять из многих детских узлов. Например, форма текстового ящика, которая представлена ShapeType.TextBox свойство, может состоять из множества узлов, таких как Paragraph и Table. Большинство форм могут включать Paragraph и Table Узлы блочного уровня. Это те же узлы, что и в основном теле. Формы всегда являются частями какого-либо абзаца, либо включены непосредственно в строку, либо прикреплены к Пункт, “Плыть” в любом месте страницы документа.

rendering-shapes-separately-from-a-document_1

Документ также может содержать формы, которые сгруппированы вместе. Groupможно включить в Microsoft Word путем выбора нескольких объектов и щелчка “Group” в меню правого клика.

rendering-shapes-separately-from-a-document_2

В Aspose.Words, Эти группы форм представлены GroupShape Узел. Они также могут быть использованы таким же образом, чтобы визуализировать всю группу.

rendering-shapes-separately-from-a-document_3

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

Типы формы, описанные выше, обеспечивают специальный метод для рендеринга форм через ShapeRenderer класс. Примером этого является ShapeRenderer Класс извлекается для Shape или GroupShape через GetShapeRenderer методом или путем прохождения Shape Для строителя этого ShapeRenderer класс. Этот класс обеспечивает доступ к членам, что позволяет придать форму следующим элементам:

  • Файл на диске с использованием Save метод перегрузки
  • Поток с использованием Save метод перегрузки
  • .NET графика Объект, используя RenderToSize и RenderToScale методы

Отображение в File или Stream

The Save Способ обеспечивает перегрузки, которые отображают форму непосредственно в файл или поток. Обе перегрузки принимают пример ImageSaveOptions класс, что позволяет определить варианты рендеринга формы. Это работает так же, как и Document.Save метод. Несмотря на то, что этот параметр необходим, вы можете передать нулевое значение, указав, что нет пользовательских опций.

Форма может быть экспортирована в любом формате изображения, указанном в SaveFormat перечисление. Например, изображение может быть визуализировано как растровое изображение, такое как JPEG, путем указания SaveFormat.Jpeg перечисление, или как векторное изображение, такое как ЭМП, путем указания SaveFormat.Emf.

Приведенный ниже пример кода иллюстрирует отображение формы изображения ЭМП отдельно от документа и сохранение на диск:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
ShapeRenderer r = shape.GetShapeRenderer();
// Define custom options which control how the image is rendered. Render the shape to the JPEG raster format.
ImageSaveOptions imageOptions = new ImageSaveOptions(SaveFormat.Emf)
{
Scale = 1.5f
};
dataDir = dataDir + "TestFile.RenderToDisk_out.emf";
// Save the rendered image to disk.
r.Save(dataDir, imageOptions);

Приведенный ниже пример кода иллюстрирует преобразование формы в изображение JPEG отдельно от документа и сохранение в потоке:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
ShapeRenderer r = new ShapeRenderer(shape);
// Define custom options which control how the image is rendered. Render the shape to the vector format EMF.
ImageSaveOptions imageOptions = new ImageSaveOptions(SaveFormat.Jpeg)
{
// Output the image in gray scale
ImageColorMode = ImageColorMode.Grayscale,
// Reduce the brightness a bit (default is 0.5f).
ImageBrightness = 0.45f
};
dataDir = dataDir + "TestFile.RenderToStream_out.jpg";
FileStream stream = new FileStream(dataDir, FileMode.Create);
// Save the rendered image to the stream using different options.
r.Save(stream, imageOptions);

The ImageSaveOptions Класс позволяет указать множество опций, которые контролируют, как визуализируется изображение. Описанная выше функциональность может быть применена таким же образом к GroupShape и Shape Узлы.

Обращаясь к a .NET Графический объект

Передача непосредственно в a Graphics объект позволяет определить собственные настройки и состояние для Graphics объект. Общий сценарий включает в себя преобразование формы непосредственно в Graphics объект, извлеченный из Windows Форма или Bitmap. Когда Shape Узел визуализируется, настройки будут влиять на внешний вид формы. Например, вы можете повернуть или масштабировать форму, используя RotateTransform или ScaleTransform методы для Graphics объект.

Приведенный ниже пример показывает, как придать форму.NET Graphics объект отдельно от документа и применить ротацию к визуализируемому изображению:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static void RenderShapeToGraphics(string dataDir, Shape shape)
{
ShapeRenderer r = shape.GetShapeRenderer();
// Find the size that the shape will be rendered to at the specified scale and resolution.
Size shapeSizeInPixels = r.GetSizeInPixels(1.0f, 96.0f);
// Rotating the shape may result in clipping as the image canvas is too small. Find the longest side
// And make sure that the graphics canvas is large enough to compensate for this.
int maxSide = System.Math.Max(shapeSizeInPixels.Width, shapeSizeInPixels.Height);
using (Bitmap image = new Bitmap((int)(maxSide * 1.25), (int)(maxSide * 1.25)))
{
// Rendering to a graphics object means we can specify settings and transformations to be applied to
// The shape that is rendered. In our case we will rotate the rendered shape.
using (Graphics gr = Graphics.FromImage(image))
{
// Clear the shape with the background color of the document.
gr.Clear(shape.Document.PageColor);
// Center the rotation using translation method below
gr.TranslateTransform((float)image.Width / 8, (float)image.Height / 2);
// Rotate the image by 45 degrees.
gr.RotateTransform(45);
// Undo the translation.
gr.TranslateTransform(-(float)image.Width / 8, -(float)image.Height / 2);
// Render the shape onto the graphics object.
r.RenderToSize(gr, 0, 0, shapeSizeInPixels.Width, shapeSizeInPixels.Height);
}
dataDir = dataDir + "TestFile.RenderToGraphics_out.png";
image.Save(dataDir, ImageFormat.Png);
Console.WriteLine("\nShape rendered to graphics successfully.\nFile saved at " + dataDir);
}
}

Точно так же и для RenderToSize метод, РазмерМетод, унаследованный от NodeRendererBase полезен для создания миниатюр контента документа. Размер формы определяется через конструктор. The RenderToSize Метод принимает Graphics объект, координаты X и Y положения изображения, а также размер изображения (ширина и высота), который будет нарисован на Graphics объект.

The Shape могут быть выполнены в определенном масштабе с использованием ShapeRenderer.RenderToScale Метод, унаследованный от NodeRendererBase класс. Это подобно тому, как Document.RenderToScale Метод, который принимает те же основные параметры. Разница между этими двумя методами заключается в том, что ShapeRenderer.RenderToScale метод, вместо буквального размера, вы выбираете поплавковое значение, которое масштабирует форму во время ее рендеринга. Если значение поплавка равно 1,0, то форма должна быть выполнена на 100% от ее первоначального размера. Поплавковое значение 0,5 уменьшит размер изображения вдвое.

Изображение в форме

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

В следующем примере показано, как визуализировать изображение формы на изображение JPEG отдельно от документа и сохранить его на диске:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
dataDir = dataDir + "TestFile.RenderShape_out.jpg";
// Save the Shape image to disk in JPEG format and using default options.
shape.GetShapeRenderer().Save(dataDir, null);

Восстановление размера формы

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

Приведенный ниже пример показывает, как создать новый объект Bitmap и Graphics с шириной и высотой формы, которая будет отображаться:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Size shapeRenderedSize = shape.GetShapeRenderer().GetSizeInPixels(1.0f, 96.0f);
using (Bitmap image = new Bitmap(shapeRenderedSize.Width, shapeRenderedSize.Height))
{
using (Graphics g = Graphics.FromImage(image))
{
// Render shape onto the graphics object using the RenderToScale or RenderToSize methods of ShapeRenderer class.
}
}

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

The SizeInPoints свойство возвращает размер формы, измеренный в точках (см. ShapeRenderer. Результатом является SizeF Объект, содержащий ширину и высоту.