添加漸變網格透明度 XPS

XPS 文件可用於顯示大量視覺信息。它們支持文本、圖像、對象透明度、網格、漸變和許多其他功能。您可以根據需要在 XPS 文件中插入漸變、網格和透明對象。在本文中,我們將詳細探討這些功能,以及不同的示例和用例。讓我們來看看以下主題:

為 C++ 安裝 XPS API

您可以在編程應用程序中快速輕鬆地配置 Aspose.Page for C++ API,以處理 XPS、PS、EPS 和其他支持的文件格式。只需從官方 下載 下載 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"));
// 將藍色實心畫筆設置為填充路徑 1
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 生效
// 因為 brush 是一個複雜的屬性值,它對於 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);
// 要從 path6 的 Fill 屬性“斷開”path7 的 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 文件中添加線性、水平或垂直漸變,以及網格或透明對象。此外,您還可以通過下載 Examples project 查看其他幾個功能。如有任何疑問,請隨時在 免費支持論壇 上給我們寫信。我們將很榮幸為您提供指導!

也可以看看