添加渐变网格透明度 XPS

XPS 文件可用于显示大量视觉信息。它们支持文本、图像、对象透明度、网格、渐变和许多其他功能。您可以根据需要在 XPS 文件中插入渐变、网格和透明对象。在本文中,我们将详细探讨这些功能,以及不同的示例和用例。让我们来看看以下主题:

为 C++ 安装 XPS API

您可以在您的编程应用程序中快速轻松地配置 Aspose.Page for C++ API,以操作 XPS、PS、EPS 和其他支持的文件格式。只需从官方 Downloads 下载 DLL 文件,或使用以下命令从 NuGet 库安装它:

PM> Install-Package Aspose.Page.Cpp 

使用 C++ 在 XPS 文件中添加渐变

有时您需要在 XPS 文件中添加渐变。您可以操作 XPS 文件,因为 API 允许您添加线性、水平和垂直渐变。让我们在 XPS 文件中添加以下渐变:

使用 C++ 在 XPS 文件中添加垂直渐变

您可以通过几个简单的 API 调用轻松地在 XPS 文件中添加垂直渐变。以下是添加垂直渐变的步骤:

  1. 创建一个新的 XPS 文档
  2. XpsGradientStop 的初始化列表
  3. 通过定义几何体创建新路径
  4. 保存生成的 XPS 文档

下面的代码基于这些步骤,演示了如何使用 C++ 在 XPS 文件中添加垂直渐变:

// 创建新的 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");

使用 C++ 在 XPS 中添加水平渐变

XPS 文件中渐变的另一种可能变化是水平渐变。添加水平梯度的方法与我们上面讨论的用例有点相关。以下是添加水平渐变需要遵循的步骤:

  1. 创建新的 XPS 文档
  2. 使用 XpsGradientStop 指定渐变色标
  3. 使用几何创建路径
  4. 保存输出 XPS 文档

以下代码片段详细说明了如何使用 C++ 在 XPS 文件中添加水平渐变:

// 创建新的 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");

使用 C++ 在 XPS 文件中插入网格

Aspose.Page for C++ API 让您可以在 XPS 文件中渲染网格,并使用许多属性来控制渲染。让我们考虑在基于 C++ 的应用程序中的 XPS 文件中插入网格的示例。您可以通过考虑以下步骤来使用此功能:

  1. 初始化 XpsDocument 类对象
  2. 为网格指定几何图形 VisualBrush
  3. 为洋红色网格 VisualBrush 创建 Canvas
  4. 创建视觉画笔并添加网格
  5. 保存输出 XPS 文件

下面的代码基于这些步骤,解释了如何使用 C++ 在 XPS 文件中插入网格:

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);

//创建 Visual Brush,它由一些 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");

使用 C++ 在 XPS 文件中插入透明对象

使用 XPS 文件的另一个令人兴奋的功能是支持透明度和不透明度。在不同的场景下,您可能需要在 XPS 文件上添加透明对象。这可以通过以下步骤来实现:

  1. 创建新的 XPS 文档
  2. 使用闭合矩形几何创建路径
  3. 为不同路径添加几何图形
  4. 保存输出 XPS 文档

这些步骤之后是以下代码,演示了如何使用 C++ 编程语言在 XPS 文件中添加透明对象:

// 创建新的 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 没有放在任何其他元素内,path1 和 path2 就相同
// (这意味着 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()));

// 使用 path2 的几何图形创建新的 path4 ...
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 又不一样了……
// (将路径 5 向下移动 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);

// 使用 path2 的几何创建新的 path6 ...
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());
// (将路径 5 向下移动 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);
// 要将 path7 的 Fill 属性与 path6 的 Fill 属性“断开”,将其重新分配给它的克隆(或 path6 的 Fill 克隆)
//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
//path7.Fill.Opacity = 0.8f;

// 保存生成的 XPS 文档
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

结论

简而言之,我们已经探索了许多使用 XPS 文件的功能。您可以在 XPS 文件中添加渐变、线性、水平或垂直以及网格或透明对象。此外,您可以通过下载 示例项目 来查看其他几个功能。如有任何歧义,请随时在 免费支持论坛 上给我们写信。我们将很荣幸为您指导!

也可以看看