Pinceles (brushes) de código y degradados de XPS

Solución de API de C++ para trabajar con pinceles y degradados de archivos XPS.

 

La solución Aspose.Page API para C++ le brinda la capacidad de manipular los gráficos vectoriales (vector graphics) de los archivos XPS. Le permite crear varias formas geométricas con diferentes colores y texturas. Conozca también la documentación de Aspose.Page sobre cómo trabajar con pinceles .

Para manipular pinceles y degradados de archivos XPS, necesitamos:

  • Aspose.Page para C++ API, que es una API de manipulación y conversión de documentos rica en características, poderosa y fácil de usar para la plataforma C++.

  • Puede descargar su última versión directamente, simplemente abra el administrador de paquetes NuGet (NuGet package manager), busque Aspose.Page.Cpp e instálelo. También puede utilizar el siguiente comando desde la Consola del Administrador de Paquetes (Package Manager Console).

Package Manager Console Command


    PM> Install-Package Aspose.Page.Cpp

Trabajar con pinceles visuales (visual brushes) con C++

La API de Aspose.Page para C++ le permite agregar una cuadrícula (grid) a sus archivos XPS utilizando unas pocas líneas de código. Esto se puede hacer tanto para documentos nuevos como existentes. La clase XpsVisualBrush se utiliza para establecer las propiedades de la cuadrícula, utilizando objetos XpsPathGeometry y XpsCanvas . Para agregar una cuadrícula a su documento XPS, deberá seguir estos pasos:

  1. Usando la clase XpsDocument , cree un objeto Document
  2. Cree un objeto XpsPathGeometry con los segmentos (segments) necesarios definidos.
  3. Utilice la clase XpsCanvas para establecer la transformación de renderizado (rendering transformation).
  4. Ajuste las propiedades de relleno (Fill) y opacidad (Opacity) como desee.
  5. Guarde el documento llamando al Método Save().
Namespaces in use
using Aspose::Page::XPS;
using Aspose::Page::XPS::XpsModel;
using System::Drawing;
Usar el pincel visual (visual brush) para crear una cuadrícula
    // 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");

Agregar un degradado horizontal (horizontal gradient) con C++.

La solución API de Aspose.Page para C++ le permite agregar diferentes tipos de degradados a sus documentos XPS utilizando la Clase XpsGradientBrush . Esta clase se utiliza para especificar la información XpsGradientStop y XpsPath en el objeto XpsDocument que representa el archivo XPS. Aquí hay un ejemplo de cómo hacer esto:

  1. Inicialice un objeto XpsDocument.
  2. Defina los parámetros XpsGradientStop y XpsPath para el documento XPS.
  3. Establezca la información de renderizado (rendering information).
  4. Guarde el documento utilizando el método Save().
Insertar un degradado horizontal en un 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 Qué es XPS Formato de archivo

XPS (XML Paper Specification) es el equivalente de Microsoft a PDF. Se basa en XML/HTML, mantiene el diseño en distintas plataformas y es independiente del sistema operativo.