Работа с холстами в XPS

Обрезайте и преобразуйте холсты файлов XPS с помощью API для C++.

 

В файлах XPS холст — это прямоугольная область на странице, где можно рисовать визуальный контент, например текст, изображения и фигуры. Он служит контейнером для этих элементов и обеспечивает основу для их организации и наслоения.   Холсты можно повторно использовать в разных частях документа или даже в нескольких документах, и они обеспечивают гибкий способ структурирования и организации контента в документе XPS. Ключевые характеристики холстов в файлах XPS:

  • Холсты могут быть вложены в другие холсты, создавая иерархическую структуру, позволяющую создавать сложные макеты и группировать элементы.
  • Холсты можно трансформировать с помощью различных операций, таких как перемещение, вращение и масштабирование. Это обеспечивает гибкое позиционирование и изменение размера контента.
  • Холсты можно обрезать по определенным областям, ограничивая видимую область их содержимого. Это полезно для создания сложных форм и эффектов.
  • Холсты могут содержать различные визуальные элементы, включая текстовые фрагменты, абзацы и текстовые поля. Они также могут содержать изображения, геометрические фигуры и другие полотна.

Управление холстами в документах — одна из функций, предлагаемых Aspose.Page для C++. Это решение для работы с различными языками описания страниц, в частности с XPS XPS.

Чтобы преобразовать холсты файла XPS, следуйте следующему руководству:

  1. Создайте файл XPS, используя XpsDocument Class .
  2. Создайте основной холст, общий для всех элементов страницы, с помощью метода AddCanvas() .
  3. Сделайте смещения влево и вверх на основном холсте, используя метод CreateMatrix() .
  4. Создайте прямоугольную геометрию пути с помощью метода CreatePathGeometry() .
  5. Создайте заливку для прямоугольников с помощью класса XpsBrush .
  6. Чтобы создать прямоугольник на холсте 2 и заполнить его, используйте класс XpsPath .
  7. Чтобы преобразовать холст 3 и расположить новый прямоугольник ниже предыдущего, используйте метод CreateMatrix() .
  8. Чтобы перевести этот холст в правую часть страницы, используйте метод Translate() . .
  9. Чтобы масштабировать холст 4, вызовите метод Scale() .
  10. Чтобы повернуть холст 5 вокруг точки в 45 градусов, используется метод RotateAround() . в удобном виде.
  11. Сохраните измененный документ 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 в решении Aspose.Page для C++ Api.

Чтобы обрезать холсты файла XPS, следуйте следующему руководству:

  1. Создайте или откройте файл XPS, используя XpsDocument Class.
  2. Создайте основной холст, общий для всех элементов страницы, с помощью метода AddCanvas() .
  3. Сделайте смещения влево и вверх на основном холсте, используя метод CreateMatrix() .
  4. Создайте прямоугольную геометрию пути с помощью метода CreatePathGeometry() .
  5. Создайте заливку для прямоугольников с помощью класса XpsBrush .
  6. Чтобы добавить еще один холст с клипом к основному холсту, снова вызовите метод AddCanvas().
  7. Создайте геометрию круга для клипа, используя класс XpsPathGeometry .
  8. Чтобы создать прямоугольник на этом холсте и заполнить его, используйте класс XpsPath .
  9. Добавьте еще один холст с помощью метода AddCanvas(), затем создайте на этом холсте прямоугольник и обведите его с помощью класса XpsPathGeometry.
  10. Сохраните измененный документ 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 может содержать разметку структуры документа вместе с информацией о том, как документ будет выглядеть. Также добавлены инструкции о том, как распечатать и визуализировать документ. Особенность формата в том, что он фиксирует описание документа, а значит, он будет выглядеть одинаково независимо от того, кто и из какой операционной системы его открывает.