XPSのコード・ブラシとグラデーション

XPSファイルのブラシ(brushes)とグラデーションを処理するC++ APIソリューション。

 

Aspose.Page API Solution for C++を使用すると、XPSファイルのベクターグラフィックを操作できます。これにより、さまざまな色とテクスチャ(textures)でさまざまな幾何学的図形を作成できます。Aspose.Pageのドキュメントで、 ブラシの使い方 についてもご覧ください。

XPSファイルのブラシとグラデーションを操作するには、次のものが必要です。

  • C++プラットフォーム向けの、機能が豊富で強力かつ使いやすいドキュメント操作/変換APIである「Aspose.Page for C++」API。

  • NuGetパッケージマネージャー(NuGet package manager)を開き、Aspose.Page.Cppを検索してインストールするだけで、最新バージョンを直接ダウンロードできます。パッケージ・マネージャー・コンソール(Package Manager Console)から次のコマンドを使用することもできます。

Package Manager Console Command


    PM> Install-Package Aspose.Page.Cpp

C++でビジュアル・ブラシ(visual brushes)を操作する

「Aspose.Page for C++」 APIを使用すると、数行のコードを使用してXPSファイルにグリッド(grid)を追加できます。これは、新しいドキュメントと既存のドキュメントの両方に対して実行可能です。XpsVisualBrushクラスは、 XpsPathGeometry オブジェクトと XpsCanvas オブジェクトを利用して、グリッドのプロパティを設定するために利用されます。 XPSドキュメントにグリッドを追加するには、次の手順に従います。

  1. XpsDocument クラスを使用して、文書(Document)オブジェクトを作成します
  2. 必要なセグメント(segments)を定義して、XpsPathGeometry オブジェクトを作成します。
  3. XpsCanvas クラスを利用して、レンダリング変換(rendering transformation)を設定します。
  4. 塗りつぶし(Fill)と不透明度(Opacity)のプロパティを必要に応じて調整します。
  5. *Save()*メソッドを呼び出してドキュメントを保存します。
Namespaces in use
using Aspose::Page::XPS;
using Aspose::Page::XPS::XpsModel;
using System::Drawing;
ビジュアルブラシを使用してグリッド(grid)を作成する
    // The path to the documents directory.
    System::String dataDir = RunExamples::GetDataDir_WorkingWithVisualBrush();
    
    System::SharedPtr<XpsDocument> doc = System::MakeObject<XpsDocument>();

	// Geometry for magenta grid 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));
    
    // Canvas for magenta grid 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->AddPath(pathGeometry);

	//Create Visual Brush, it is specified by some XPS fragment (vector graphics and glyphs)
    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::ExplicitCast<Aspose::Page::XPS::XpsModel::XpsVisualBrush>(gridPath->get_Fill()))->set_TileMode(Aspose::Page::XPS::XpsModel::XpsTileMode::Tile);
    // New canvas
    System::SharedPtr<XpsCanvas> canvas = doc->AddCanvas();
    canvas->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 268.f, 70.f));
    // Add grid
    canvas->AddPath(pathGeometry);
    
	// Red transparent rectangle in the middle top
    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);
    
	// Save resultant XPS document
    doc->Save(dataDir + u"output/" + u"AddGrid_out.xps");

C++ で水平方向のグラデーション(horizontal gradient)を追加します。

Aspose.Page API Solution for C++を使用すると、 XpsGradientBrush クラスを使用して、さまざまなタイプのグラデーションを XPS ドキュメントに追加できます。このクラスは、XPSファイルを表す XpsDocument オブジェクトに対して XpsGradientStop 情報と XpsPath 情報を指定するために使用されます。これを行う方法の例を次に示します。

  1. XpsDocument オブジェクトを初期化(Initialize)します。
  2. XPSドキュメントに対して、XpsGradientStop と XpsPath のパラメータを定義します。
  3. レンダリング情報(rendering information)を設定します。
  4. *Save()*メソッドを使用してドキュメントを保存します。
XPSに水平グラデーションを挿入する
    // The path to the documents directory.
    System::String dataDir = RunExamples::GetDataDir_WorkingWithGradient();
    // Create new XPS Document
    System::SharedPtr<XpsDocument> doc = System::MakeObject<XpsDocument>();
    
	// Initialize List of XpsGradentStop
    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));
    
	// Create new path by defining geometery in abbreviation form
    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::ExplicitCast<Aspose::Page::XPS::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);
    
	// Save resultant XPS document
    doc->Save(dataDir + u"output/" + u"AddHorizontalGradient_outXPS.xps");

XPS XPS ファイル形式とは

XPS (XML Paper Specification) は、Microsoft が提供する PDF の代替フォーマットです。XML/HTML ベースで、プラットフォームに依存せずレイアウトを保持します。