Файли XPS можна використовувати для відображення великої кількості візуальної інформації. Вони підтримують текст, зображення, прозорість об’єктів, сітки, градієнти та багато інших функцій. Ви можете вставляти градієнт, сітку та прозорі об’єкти у файли XPS відповідно до ваших вимог. У цій статті ми детально розглянемо ці функції разом із різними прикладами та випадками використання. Давайте пройдемося по наступних темах:
- Встановлення XPS API для C++
- Додавання градієнта у файл XPS за допомогою C++
- Вставте сітку у файл XPS за допомогою C++
- Вставте прозорий об’єкт у файл XPS за допомогою C++
Встановлення XPS API для C++
Ви можете швидко та легко налаштувати API Aspose.Page for C++ у своїх програмних програмах для роботи з XPS, PS, EPS та іншими підтримуваними форматами файлів. Просто завантажте файл DLL з офіційного Downloads або встановіть його з галереї NuGet за допомогою команди нижче:
PM> Install-Package Aspose.Page.Cpp
Додавання градієнта у файл XPS за допомогою C++
Іноді потрібно додати градієнт у файли XPS. Ви можете маніпулювати файлом XPS, оскільки API дозволяє додавати лінійний, горизонтальний і вертикальний градієнт. Давайте додамо такі градієнти у файл XPS:
Додайте вертикальний градієнт у файл XPS за допомогою C++
Ви можете легко додати вертикальний градієнт у файли XPS за допомогою кількох простих викликів API. Нижче наведено кроки для додавання вертикального градієнта:
- Створіть новий документ XPS
- Ініціалізувати список XpsGradientStop
- Створіть новий шлях, визначивши геометрію
- Збережіть отриманий документ XPS
Наведений нижче код базується на цих кроках і демонструє, як додати вертикальний градієнт у файл XPS за допомогою C++:
// Створіть новий документ XPS
auto doc = System::MakeObject<XpsDocument>();
// Ініціалізувати список XpsGradientStop
auto stops = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>>();
stops->Add(doc->CreateGradientStop(doc->CreateColor(253, 255, 12, 0), 0.f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 154, 0), 0.359375f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 56, 0), 0.424805f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(253, 255, 229, 0), 0.879883f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 255, 234), 1.f));
// Створіть новий шлях, визначивши геометрію у формі абревіатури
System::SharedPtr<XpsPath> path = doc->AddPath(doc->CreatePathGeometry(u"M 10,110 L 228,110 228,200 10,200"));
path->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 20.f, 70.f));
path->set_Fill(doc->CreateLinearGradientBrush(System::Drawing::PointF(10.f, 110.f), System::Drawing::PointF(10.f, 200.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);
// Збережіть отриманий документ XPS
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");
Додайте горизонтальний градієнт у XPS за допомогою C++
Іншим можливим варіантом градієнта у файлах XPS є горизонтальний градієнт. Підхід додавання горизонтального градієнта трохи пов’язаний із випадком використання, який ми обговорювали вище. Нижче наведено кроки, які потрібно виконати, щоб додати горизонтальний градієнт:
- Створіть новий документ XPS
- Укажіть межі градієнта за допомогою XpsGradientStop
- Створіть контур із геометрією
- Збережіть вихідний документ XPS
У наступному фрагменті коду пояснюється, як додати горизонтальний градієнт у файли XPS за допомогою C++:
// Створіть новий документ XPS
auto doc = System::MakeObject<XpsDocument>();
// Ініціалізувати список XpsGradientStop
System::SharedPtr<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>> stops = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>>();
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 244, 253, 225), 0.0673828f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 251, 240, 23), 0.314453f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 252, 209, 0), 0.482422f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 241, 254, 161), 0.634766f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 53, 253, 255), 0.915039f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 12, 91, 248), 1.f));
// Створіть новий шлях, визначивши геометрію у формі абревіатури
System::SharedPtr<XpsPath> path = doc->AddPath(doc->CreatePathGeometry(u"M 10,210 L 228,210 228,300 10,300"));
path->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 20.f, 70.f));
path->set_Fill(doc->CreateLinearGradientBrush(System::Drawing::PointF(10.f, 0.f), System::Drawing::PointF(228.f, 0.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);
// Збережіть отриманий документ XPS
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");
Вставте сітку у файл XPS за допомогою C++
API Aspose.Page for C++ дозволяє відтворювати сітки у файлах XPS із багатьма властивостями для керування відтворенням. Давайте розглянемо приклад вставки сітки у файл XPS у ваших програмах на основі C++. Ви можете працювати з цією функцією, виконавши наведені нижче дії.
- Ініціалізація об’єкта класу XpsDocument
- Укажіть геометрію для сітки VisualBrush
- Створіть Canvas для пурпурової сітки VisualBrush
- Створіть візуальний пензель і додайте сітку
- Збережіть вихідний файл XPS
Наведений нижче код базується на цих кроках і пояснює, як вставити сітку у файли XPS за допомогою C++:
auto doc = System::MakeObject<XpsDocument>();
// Геометрія для пурпурової сітки VisualBrush
System::SharedPtr<XpsPathGeometry> pathGeometry = doc->CreatePathGeometry();
pathGeometry->AddSegment(doc->CreatePolyLineSegment(System::MakeArray<System::Drawing::PointF>({ System::Drawing::PointF(240.f, 5.f), System::Drawing::PointF(240.f, 310.f), System::Drawing::PointF(0.f, 310.f) })));
pathGeometry->idx_get(0)->set_StartPoint(System::Drawing::PointF(0.f, 5.f));
// Полотно для пурпурової сітки VisualBrush
System::SharedPtr<XpsCanvas> visualCanvas = doc->CreateCanvas();
System::SharedPtr<XpsPath> visualPath = visualCanvas->AddPath(doc->CreatePathGeometry(u"M 0,4 L 4,4 4,0 6,0 6,4 10,4 10,6 6,6 6,10 4,10 4,6 0,6 Z"));
visualPath->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.f, .61f, 0.1f, 0.61f)));
System::SharedPtr<XpsPath> gridPath = doc->CreatePath(pathGeometry);
//Створити візуальний пензель, який визначається деяким фрагментом XPS (векторна графіка та гліфи)
gridPath->set_Fill(doc->CreateVisualBrush(visualCanvas, System::Drawing::RectangleF(0.f, 0.f, 10.f, 10.f), System::Drawing::RectangleF(0.f, 0.f, 10.f, 10.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsVisualBrush>(gridPath->get_Fill()))->set_TileMode(Aspose::Page::Xps::XpsModel::XpsTileMode::Tile);
// Нове полотно
System::SharedPtr<XpsCanvas> canvas = doc->AddCanvas();
canvas->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 268.f, 70.f));
// Додайте сітку
canvas->AddPath(gridPath);
// Червоний прозорий прямокутник посередині вгорі
System::SharedPtr<XpsPath> path = canvas->AddPath(doc->CreatePathGeometry(u"M 30,20 l 258.24,0 0,56.64 -258.24,0 Z"));
path = canvas->AddPath(doc->CreatePathGeometry(u"M 10,10 L 228,10 228,100 10,100"));
path->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.0f, 0.0f, 0.0f)));
path->set_Opacity(0.7f);
// Збережіть отриманий документ XPS
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");
Вставте прозорий об’єкт у файл XPS за допомогою C++
Ще одна цікава функція для роботи з файлами XPS — підтримка прозорості та непрозорості. Вам може знадобитися додати прозорі об’єкти до файлу XPS за різних сценаріїв. Цього можна досягти за допомогою наступних кроків:
- Створити новий документ XPS
- Створіть контур із замкнутою прямокутною геометрією
- Додайте геометрію для різних шляхів
- Збережіть вихідний документ XPS
Ці кроки супроводжуються наступним кодом, який демонструє, як додати прозорий об’єкт у файл XPS за допомогою мови програмування C++:
// Створіть новий документ XPS
auto doc = System::MakeObject<XpsDocument>();
// Просто щоб продемонструвати прозорість
doc->AddPath(doc->CreatePathGeometry(u"M120,0 H400 v1000 H120"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));
doc->AddPath(doc->CreatePathGeometry(u"M300,120 h600 V420 h-600"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));
// Створіть контур із замкнутою прямокутною геометрією
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// Встановіть синю суцільну кисть для заповнення path1
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Додайте його на поточну сторінку
System::SharedPtr<XpsPath> path2 = doc->Add(path1);
// path1 і path2 однакові, як тільки path1 не було розміщено всередині жодного іншого елемента
// (це означає, що path1 не мав батьківського елемента).
// Через це колір прямокутника на сторінці фактично стає зеленим
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));
// Тепер додайте path2 ще раз. Тепер path2 має батьківський елемент. Отже, path3 не буде таким же, як path2.
// Таким чином на сторінці з'являється новий прямокутник ...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ... і ми переводимо його на 300 одиниць нижче ...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... і встановіть суцільний червоний пензель, щоб заповнити його
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));
// Створіть новий path4 з геометрією path2 ...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... перемістіть його на 300 одиниць вправо ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... і встановіть синю суцільну заливку
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Додайте path4 ще раз.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4 і path5 знову не однакові ...
// (перемістити path5 на 300 одиниць нижче)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// щоб від’єднати значення RenderTransform від path4 (див. наступний коментар щодо властивості Fill)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... але якщо ми встановимо непрозорість властивості Fill, це діятиме як для path5, так і для path4
// оскільки пензель — це складне значення властивості, яке залишається незмінним для path5 і path4
path5->get_Fill()->set_Opacity(0.8f);
// Створіть новий шлях6 із геометрією шляху2...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... перемістіть його на 600 одиниць вправо ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... і встановіть жовту суцільну заливку
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));
// Тепер додайте клон path6 ...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (перемістити path5 на 300 одиниць нижче)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... і встановити непрозорість для path7
path7->get_Fill()->set_Opacity(0.8f);
// Тепер непрозорість діє незалежно, як тільки значення властивостей клонуються разом з елементом
// Наступний блок коду еквівалентний попередньому.
// Додайте сам path6. path6 і path7 не однакові. Хоча значення властивостей Fill однакові
//XpsPath path7 = doc.Add(path6);
//path7.RenderTransform = path7.RenderTransform.Clone();
//path7.RenderTransform.Translate(0, 300);
// Щоб «від’єднати» властивість Fill шляху 7 від властивості Fill шляху 6, перепризначте його його клону (або клону Fill шляху 6)
//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
//path7.Fill.Opacity = 0,8f;
// Збережіть отриманий документ XPS
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");
Висновок
У двох словах, ми дослідили низку функцій для роботи з файлами XPS. У файли XPS можна додати градієнт, лінійний, горизонтальний або вертикальний, а також сітку або прозорі об’єкти. Крім того, ви можете ознайомитися з кількома іншими функціями, завантаживши Приклади проекту. У разі будь-яких неясностей, будь ласка, напишіть нам на безкоштовні форуми підтримки. Ми будемо мати честь вести вас!