XPS의 코드 브러시 및 그라디언트

XPS 파일의 브러시(brushes) 및 그라디언트 작업을 위한 C++ API 솔루션.

 

C++용 Aspose.Page API 솔루션은 XPS 파일의 벡터 그래픽을 조작하는 기능을 제공합니다. 다양한 색상과 질감(textures)으로 다양한 기하학적 형태를 만들 수 있습니다. 브러시 작업 방법 에 대한 Aspose.Page 문서도 참조하십시오.

XPS 파일의 브러시 및 그라디언트를 조작하려면 다음이 필요합니다:

  • Aspose.Page for C++ API는 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)로 작업하기

C++용 Aspose.Page 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) 추가.

C++용 Aspose.Page API 솔루션을 사용하면 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 ベースで、プラットフォームに依存せずレイアウトを保持します。