Работа с холстами в XPS
Обрезайте и преобразуйте холсты файлов XPS с помощью API для C++.
В файлах XPS холст — это прямоугольная область на странице, где можно рисовать визуальный контент, например текст, изображения и фигуры. Он служит контейнером для этих элементов и обеспечивает основу для их организации и наслоения. Холсты можно повторно использовать в разных частях документа или даже в нескольких документах, и они обеспечивают гибкий способ структурирования и организации контента в документе XPS. Ключевые характеристики холстов в файлах XPS:
- Холсты могут быть вложены в другие холсты, создавая иерархическую структуру, позволяющую создавать сложные макеты и группировать элементы.
- Холсты можно трансформировать с помощью различных операций, таких как перемещение, вращение и масштабирование. Это обеспечивает гибкое позиционирование и изменение размера контента.
- Холсты можно обрезать по определенным областям, ограничивая видимую область их содержимого. Это полезно для создания сложных форм и эффектов.
- Холсты могут содержать различные визуальные элементы, включая текстовые фрагменты, абзацы и текстовые поля. Они также могут содержать изображения, геометрические фигуры и другие полотна.
Управление холстами в документах — одна из функций, предлагаемых Aspose.Page для C++. Это решение для работы с различными языками описания страниц, в частности с XPS XPS.
Чтобы преобразовать холсты файла XPS, следуйте следующему руководству:
- Создайте файл XPS, используя XpsDocument Class .
- Создайте основной холст, общий для всех элементов страницы, с помощью метода AddCanvas() .
- Сделайте смещения влево и вверх на основном холсте, используя метод CreateMatrix() .
- Создайте прямоугольную геометрию пути с помощью метода CreatePathGeometry() .
- Создайте заливку для прямоугольников с помощью класса XpsBrush .
- Чтобы создать прямоугольник на холсте 2 и заполнить его, используйте класс XpsPath .
- Чтобы преобразовать холст 3 и расположить новый прямоугольник ниже предыдущего, используйте метод CreateMatrix() .
- Чтобы перевести этот холст в правую часть страницы, используйте метод Translate() . .
- Чтобы масштабировать холст 4, вызовите метод Scale() .
- Чтобы повернуть холст 5 вокруг точки в 45 градусов, используется метод RotateAround() . в удобном виде.
- Сохраните измененный документ XPS, используя метод XPsDocument.Save() .
Преобразование холста
// The path to the documents directory. | |
System::String dataDir = RunExamples::GetDataDir_WorkingWithCanvas(); | |
// Create new XPS Document | |
System::SharedPtr<XpsDocument> doc = System::MakeObject<XpsDocument>(); | |
// Create main canvas, common for all page elemnts | |
System::SharedPtr<XpsCanvas> canvas1 = doc->AddCanvas(); | |
// Make left and top offsets in the main canvas | |
canvas1->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 20.0f, 10.0f)); | |
// Create rectangle path geometry | |
System::SharedPtr<XpsPathGeometry> rectGeom = doc->CreatePathGeometry(u"M 0,0 L 200,0 200,100 0,100 Z"); | |
// Create a fill for rectangles | |
System::SharedPtr<XpsBrush> fill = doc->CreateSolidColorBrush(doc->CreateColor(12, 15, 159)); | |
// Add new canvas without any transformations to the main canvas | |
System::SharedPtr<XpsCanvas> canvas2 = canvas1->AddCanvas(); | |
// Create rectangle in this canvas and fill it | |
System::SharedPtr<XpsPath> rect = canvas2->AddPath(rectGeom); | |
rect->set_Fill(fill); | |
// Add new canvas with translate transformation to the main canvas | |
System::SharedPtr<XpsCanvas> canvas3 = canvas1->AddCanvas(); | |
// Translate this canvas to position new rectangle below previous rectnagle | |
canvas3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 200.0f)); | |
// Translate this canvas to right side of page | |
canvas3->get_RenderTransform()->Translate(500.0f, 0.0f); | |
// Create rectangle in this canvas and fill it | |
rect = canvas3->AddPath(rectGeom); | |
rect->set_Fill(fill); | |
// Add new canvas with double scale transformation to the main canvas | |
System::SharedPtr<XpsCanvas> canvas4 = canvas1->AddCanvas(); | |
// Translate this canvas to position new rectangle below previous rectnagle | |
canvas4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 400.0f)); | |
// Scale this canvas | |
canvas4->get_RenderTransform()->Scale(2.0f, 2.0f); | |
// Create rectangle in this canvas and fill it | |
rect = canvas4->AddPath(rectGeom); | |
rect->set_Fill(fill); | |
// Add new canvas with rotation around a point transformation to the main canvas | |
System::SharedPtr<XpsCanvas> canvas5 = canvas1->AddCanvas(); | |
// Translate this canvas to position new rectangle below previous rectnagle | |
canvas5->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 800.0f)); | |
// Rotate this canvas aroud a point on 45 degrees | |
canvas5->get_RenderTransform()->RotateAround(45.0f, System::Drawing::PointF(100.0f, 50.0f)); | |
rect = canvas5->AddPath(rectGeom); | |
rect->set_Fill(fill); | |
// Save resultant XPS document | |
doc->Save(dataDir + u"output/" + u"output1.xps"); |
Чтобы обрезать холсты файла XPS, следуйте следующему руководству:
- Создайте или откройте файл XPS, используя XpsDocument Class.
- Создайте основной холст, общий для всех элементов страницы, с помощью метода AddCanvas() .
- Сделайте смещения влево и вверх на основном холсте, используя метод CreateMatrix() .
- Создайте прямоугольную геометрию пути с помощью метода CreatePathGeometry() .
- Создайте заливку для прямоугольников с помощью класса XpsBrush .
- Чтобы добавить еще один холст с клипом к основному холсту, снова вызовите метод AddCanvas().
- Создайте геометрию круга для клипа, используя класс XpsPathGeometry .
- Чтобы создать прямоугольник на этом холсте и заполнить его, используйте класс XpsPath .
- Добавьте еще один холст с помощью метода AddCanvas(), затем создайте на этом холсте прямоугольник и обведите его с помощью класса XpsPathGeometry.
- Сохраните измененный документ XPS с помощью метода XPsDocument.Save().
Вырезка из холста
// The path to the documents directory. | |
System::String dataDir = RunExamples::GetDataDir_WorkingWithCanvas(); | |
// Create new XPS Document | |
System::SharedPtr<XpsDocument> doc = System::MakeObject<XpsDocument>(); | |
// Create main canvas, common for all page elemnts | |
System::SharedPtr<XpsCanvas> canvas1 = doc->AddCanvas(); | |
// Make left and top offsets in the main canvas | |
canvas1->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 20.0f, 10.0f)); | |
// Create rectangle path geometry | |
System::SharedPtr<XpsPathGeometry> rectGeom = doc->CreatePathGeometry(u"M 0,0 L 500,0 500,300 0,300 Z"); | |
// Create a fill for rectangles | |
System::SharedPtr<XpsBrush> fill = doc->CreateSolidColorBrush(doc->CreateColor(12, 15, 159)); | |
// Add another canvas with clip to the main canvas | |
System::SharedPtr<XpsCanvas> canvas2 = canvas1->AddCanvas(); | |
// Create circle geometry for clip | |
System::SharedPtr<XpsPathGeometry> clipGeom = doc->CreatePathGeometry(u"M250,250 A100,100 0 1 1 250,50 100,100 0 1 1 250,250"); | |
canvas2->set_Clip(clipGeom); | |
// Create rectangle in this canvas and fill it | |
System::SharedPtr<XpsPath> rect = canvas2->AddPath(rectGeom); | |
rect->set_Fill(fill); | |
// Add the second canvas with stroked rectangle to the main canvas | |
System::SharedPtr<XpsCanvas> canvas3 = canvas1->AddCanvas(); | |
// Create rectangle in this canvas and stroke it | |
rect = canvas3->AddPath(rectGeom); | |
rect->set_Stroke(fill); | |
rect->set_StrokeThickness(2.0f); | |
// Save resultant XPS document | |
doc->Save(dataDir + u"output/" + u"output2.xps"); |
XPS Формат файла XPS
Формат XPS похож на формат PDF. Оба являются форматами языка описания страниц (PDL). EPS основан на HTML, а не на языке PostScript. Файл .eps может содержать разметку структуры документа вместе с информацией о том, как документ будет выглядеть. Также добавлены инструкции о том, как распечатать и визуализировать документ. Особенность формата в том, что он фиксирует описание документа, а значит, он будет выглядеть одинаково независимо от того, кто и из какой операционной системы его открывает.