Pennelli e sfumature di codice XPS

Soluzione API C++ per lavorare con i pennelli (brushes) e i gradienti (gradients) dei file XPS.

 

La soluzione API Aspose.Page per C++ offre la possibilità di manipolare la grafica vettoriale dei file XPS. Ti consente di creare varie forme geometriche con colori e trame diversi. Consulta la documentazione di Aspose.Page su come lavorare con i pennelli .

Per manipolare i pennelli (brushes) e i gradienti dei file XPS, occorrono:

  • API Aspose.Page per C++, che è un'API di manipolazione e conversione di documenti ricca di funzionalità, potente e facile da usare per la piattaforma C++.

  • Puoi scaricare la sua ultima versione direttamente, apri semplicemente NuGet package manager, cerca Aspose.Page.Cpp e installa. È inoltre possibile utilizzare il seguente comando dalla Console di Gestione pacchetti (Package Manager Console).

Package Manager Console Command


    PM> Install-Package Aspose.Page.Cpp

Lavora con i pennelli visivi (visual brushes) in C++

L’API Aspose.Page per C++ ti consente di aggiungere una griglia (grid) ai tuoi file XPS utilizzando alcune righe di codice. Questa operazione può essere eseguita sia per i documenti nuovi che per quelli esistenti. La classe XpsVisualBrush viene utilizzata per impostare le proprietà della griglia, utilizzando gli oggetti XpsPathGeometry e XpsCanvas . Per aggiungere una griglia al tuo documento XPS, dovrai seguire questi passaggi:

  1. Utilizzando la Classe XpsDocument è possibile creare un oggetto Document
  2. Crea un oggetto XpsPathGeometry con i segmenti (segments) necessari definiti.
  3. Utilizza la Classe XpsCanvas per impostare la trasformazione di rendering (rendering transformation).
  4. Regola le proprietà di riempimento (Fill) e di opacità (Opacity) come desiderato.
  5. Salva il documento richiamando il Metodo Save().
Namespaces in use
using Aspose::Page::XPS;
using Aspose::Page::XPS::XpsModel;
using System::Drawing;
Usa il pennello visivo (visual brush) per creare la griglia
    // 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");

Aggiungere un gradiente orizzontale (horizontal gradient) con C++.

La soluzione API Aspose.Page per C++ ti consente di aggiungere vari tipi di gradienti ai tuoi documenti XPS utilizzando la Classe XpsGradientBrush . Questa classe è utilizzata per specificare le informazioni contenute in XpsGradientStop e XpsPath all’oggetto XpsDocument che rappresenta il file XPS. Di seguito è riportato un esempio di come eseguire questa operazione:

  1. Inizializzare un oggetto XpsDocument.
  2. Definire i parametri XpsGradientStop e XpsPath per il documento XPS.
  3. Impostare le informazione relative al rendering.
  4. Salva il documento utilizzando il Metodo Save().
Inserisci un gradiente orizzontale (horizontal gradient) in un formato 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 Cos'è il formato file XPS

XPS (XML Paper Specification) è l’alternativa Microsoft al PDF. Basato su XML/HTML, mantiene il layout su diverse piattaforme ed è indipendente dal sistema operativo.