Ajouter une transparence de grille de dégradé XPS

Les fichiers XPS peuvent être utilisés pour afficher de nombreuses informations visuelles. Ils prennent en charge le texte, les images, la transparence des objets, les grilles, les dégradés et de nombreuses autres fonctionnalités. Vous pouvez insérer des objets dégradés, de grille et transparents dans des fichiers XPS selon vos besoins. Dans cet article, nous allons explorer ces fonctionnalités en détail, ainsi que différents exemples et cas d’utilisation. Passons en revue les sujets suivants :

Installation de l’API XPS pour C++

Vous pouvez configurer rapidement et facilement l’API Aspose.Page for C++ dans vos applications de programmation pour manipuler XPS, PS, EPS et d’autres formats de fichiers pris en charge. Téléchargez simplement le fichier DLL à partir des Téléchargements officiels ou installez-le à partir de la galerie NuGet avec la commande ci-dessous :

PM> Install-Package Aspose.Page.Cpp 

Ajout d’un dégradé dans un fichier XPS à l’aide de C++

Parfois, vous devez ajouter un dégradé dans les fichiers XPS. Vous pouvez manipuler le fichier XPS car l’API vous permet d’ajouter un dégradé linéaire, horizontal et vertical. Ajoutons les dégradés suivants dans un fichier XPS :

Ajouter un dégradé vertical dans le fichier XPS avec C++

Vous pouvez facilement ajouter un dégradé vertical dans les fichiers XPS avec quelques appels d’API simples. Voici les étapes pour ajouter le dégradé vertical :

  1. Créer un nouveau Document XPS
  2. Initialiser la liste de XpsGradientStop
  3. Créer un nouveau chemin en définissant la géométrie
  4. Enregistrer le document XPS résultant

Le code ci-dessous est basé sur ces étapes, qui montre comment ajouter un dégradé vertical dans un fichier XPS à l’aide de C++ :

// Créer un nouveau document XPS
auto doc = System::MakeObject<XpsDocument>();

// Initialiser la liste de 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));

// Créer un nouveau chemin en définissant la géométrie sous forme d'abréviation
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);

// Enregistrer le document XPS résultant
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");

Ajouter un dégradé horizontal dans XPS en utilisant C++

Une autre variation possible du dégradé dans les fichiers XPS est le dégradé horizontal. L’approche consistant à ajouter un gradient horizontal est un peu liée au cas d’utilisation dont nous avons discuté ci-dessus. Voici les étapes que vous devez suivre pour ajouter un dégradé horizontal :

  1. Créer un nouveau document XPS
  2. Spécifiez les arrêts de dégradé à l’aide de XpsGradientStop
  3. Créer un chemin avec une géométrie
  4. Enregistrer le document XPS de sortie

L’extrait de code suivant explique comment ajouter un dégradé horizontal dans les fichiers XPS à l’aide de C++ :

// Créer un nouveau document XPS
auto doc = System::MakeObject<XpsDocument>();

// Initialiser la liste de 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));

// Créer un nouveau chemin en définissant la géométrie sous forme d'abréviation
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);

// Enregistrer le document XPS résultant
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");

Insérer la grille dans le fichier XPS avec C++

Aspose.Page for l’API C++ vous permet de rendre les grilles dans les fichiers XPS avec de nombreuses propriétés pour contrôler le rendu. Prenons l’exemple de l’insertion d’une grille dans un fichier XPS dans vos applications basées sur C++. Vous pouvez utiliser cette fonctionnalité en suivant les étapes ci-dessous :

  1. Initialiser l’objet de classe XpsDocument
  2. Spécifiez la géométrie de la grille VisualBrush
  3. Créer Canvas pour la grille magenta VisualBrush
  4. Créer un pinceau visuel et ajouter une grille
  5. Enregistrer le fichier XPS de sortie

Le code ci-dessous est basé sur ces étapes qui expliquent comment insérer une grille dans des fichiers XPS à l’aide de C++ :

auto doc = System::MakeObject<XpsDocument>();

// Géométrie pour la grille magenta 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));

// Canevas pour grille magenta 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);

//Créer Visual Brush, il est spécifié par un fragment XPS (graphiques vectoriels et glyphes)
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);

// Nouvelle toile
System::SharedPtr<XpsCanvas> canvas = doc->AddCanvas();
canvas->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 268.f, 70.f));

// Ajouter une grille
canvas->AddPath(gridPath);

// Rectangle transparent rouge en haut au milieu
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);

// Enregistrer le document XPS résultant
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");

Insérer un objet transparent dans le fichier XPS à l’aide de C++

Une autre fonctionnalité intéressante pour travailler avec des fichiers XPS est la prise en charge de la transparence et de l’opacité. Vous devrez peut-être ajouter des objets transparents sur le fichier XPS dans différents scénarios. Ceci peut être réalisé à l’aide des étapes suivantes :

  1. Créer un nouveau Document XPS
  2. Créer un chemin avec une géométrie de rectangle fermé
  3. Ajouter une géométrie pour différents chemins
  4. Enregistrer le document XPS de sortie

Ces étapes sont suivies du code suivant, qui montre comment ajouter un objet transparent dans un fichier XPS avec le langage de programmation C++ :

// Créer un nouveau document XPS
auto doc = System::MakeObject<XpsDocument>();

// Juste pour faire preuve de transparence
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()));

// Créer un chemin avec une géométrie de rectangle fermé
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// Définir le pinceau solide bleu pour remplir le chemin1
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Ajoutez-le à la page actuelle
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// path1 et path2 sont les mêmes dès que path1 n'a pas été placé à l'intérieur d'un autre élément
// (ce qui signifie que path1 n'avait pas d'élément parent).
// Parce que la couleur de ce rectangle sur la page devient effectivement verte
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// Maintenant, ajoutez à nouveau path2. Maintenant, path2 a un parent. Ainsi, path3 ne sera pas le même que path2.
// Ainsi un nouveau rectangle est peint sur la page...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ... et nous le décalons de 300 unités plus bas ...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... et définissez un pinceau solide rouge pour le remplir
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));

// Créez un nouveau path4 avec la géométrie de path2 ...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... le décaler de 300 unités vers la droite ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... et définissez un remplissage uni bleu
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));

// Ajoutez à nouveau path4.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4 et path5 ne sont plus les mêmes ...
// (déplacer path5 300 unités plus bas)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// pour déconnecter la valeur RenderTransform de path4 (voir le commentaire suivant sur la propriété Fill)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... mais si nous définissons l'opacité de la propriété Fill, elle prendra effet à la fois sur path5 et path4
// car brush est une valeur de propriété complexe qui reste la même pour path5 et path4
path5->get_Fill()->set_Opacity(0.8f);

// Créez un nouveau path6 avec la géométrie de path2 ...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... le décaler de 600 unités vers la droite ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... et définissez un remplissage solide jaune
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));

// Ajoutez maintenant le clone de path6 ...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (déplacer path5 300 unités plus bas)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... et définir l'opacité pour path7
path7->get_Fill()->set_Opacity(0.8f);
// Désormais, l'opacité agit indépendamment dès que les valeurs de propriété sont clonées avec l'élément

// Le bloc de code suivant est équivalent au précédent.
// Ajoutez path6 lui-même. path6 et path7 ne sont pas identiques. Bien que leurs valeurs de propriété Fill soient les mêmes 
//XpsPath path7 = doc.Add(path6);
//chemin7.RenderTransform = chemin7.RenderTransform.Clone();
//path7.RenderTransform.Translate(0, 300);
// Pour "déconnecter" la propriété Fill de path7 de la propriété Fill de path6, réaffectez-la à son clone (ou au clone Fill de path6)
//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
//path7.Fill.Opacity = 0.8f ;

// Enregistrer le document XPS résultant
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

Conclusion

En un mot, nous avons exploré un certain nombre de fonctionnalités pour travailler avec les fichiers XPS. Vous pouvez ajouter un dégradé, linéaire, horizontal ou vertical, ainsi que des grilles ou des objets transparents dans les fichiers XPS. De plus, vous pouvez jeter un œil à plusieurs autres fonctionnalités en téléchargeant le Projet d’exemples. En cas d’ambiguïté, n’hésitez pas à nous écrire sur les forums d’assistance gratuits. Nous serons honorés de vous guider !

Voir également