Fügen Sie Gradient Grid Transparency XPS hinzu

XPS Dateien können verwendet werden, um viele visuelle Informationen anzuzeigen. Sie unterstützen Text, Bilder, Objekttransparenz, Raster, Farbverläufe und viele andere Funktionen. Sie können gemäß Ihren Anforderungen Verlaufs, Raster und transparente Objekte in XPS Dateien einfügen. In diesem Artikel werden wir diese Funktionen im Detail untersuchen, zusammen mit verschiedenen Beispielen und Anwendungsfällen. Lassen Sie uns die folgenden Themen durchgehen:

XPS-API für C++ installieren

Sie können die Aspose.Page for C++-API schnell und einfach in Ihren Programmieranwendungen konfigurieren, um XPS, PS, EPS und andere unterstützte Dateiformate zu manipulieren. Laden Sie einfach die DLL Datei von den offiziellen Downloads herunter oder installieren Sie sie mit dem folgenden Befehl aus der NuGet-Galerie:

PM> Install-Package Aspose.Page.Cpp 

Hinzufügen eines Farbverlaufs in einer XPS Datei mit C++

Manchmal müssen Sie in XPS Dateien einen Farbverlauf hinzufügen. Sie können die XPS Datei bearbeiten, da Sie mit der API lineare, horizontale und vertikale Farbverläufe hinzufügen können. Lassen Sie uns die folgenden Farbverläufe in einer XPS Datei hinzufügen:

Vertikalen Farbverlauf in XPS Datei mit C++ hinzufügen

Mit ein paar einfachen API-Aufrufen können Sie ganz einfach vertikale Farbverläufe in XPS Dateien hinzufügen. Im Folgenden sind die Schritte zum Hinzufügen des vertikalen Farbverlaufs aufgeführt:

  1. Erstellen Sie ein neues XPS-Dokument
  2. Liste von XpsGradientStop initialisieren
  3. Erstellen Sie einen neuen Pfad, indem Sie die Geometrie definieren
  4. Speichern Sie das resultierende XPS-Dokument

Der folgende Code basiert auf diesen Schritten, die zeigen, wie Sie mit C++ einen vertikalen Farbverlauf in einer XPS Datei hinzufügen:

// Neues XPS-Dokument erstellen
auto doc = System::MakeObject<XpsDocument>();

// Liste von XpsGradientStop initialisieren
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));

// Erstellen Sie einen neuen Pfad, indem Sie die Geometrie in Abkürzungsform definieren
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);

// Speichern Sie das resultierende XPS-Dokument
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");

Hinzufügen eines horizontalen Farbverlaufs in XPS mit C++

Eine weitere mögliche Variante des Farbverlaufs in XPS Dateien ist der horizontale Farbverlauf. Der Ansatz, einen horizontalen Gradienten hinzuzufügen, hängt etwas mit dem Anwendungsfall zusammen, den wir oben besprochen haben. Im Folgenden sind die Schritte aufgeführt, die Sie befolgen müssen, um einen horizontalen Farbverlauf hinzuzufügen:

  1. Neues XPS-Dokument erstellen
  2. Geben Sie Farbverlaufsstopps mit XpsGradientStop an
  3. Pfad mit Geometrie erstellen
  4. XPS-Ausgabedokument speichern

Das folgende code snippet erläutert, wie man mit C++ horizontale Farbverläufe in XPS Dateien hinzufügt:

// Neues XPS-Dokument erstellen
auto doc = System::MakeObject<XpsDocument>();

// Liste von XpsGradientStop initialisieren
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));

// Erstellen Sie einen neuen Pfad, indem Sie die Geometrie in Abkürzungsform definieren
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);

// Speichern Sie das resultierende XPS-Dokument
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");

Grid in XPS Datei mit C++ einfügen

Mit Aspose.Page for C++ API können Sie Raster in den XPS Dateien mit vielen Eigenschaften rendern, um das Rendering zu steuern. Betrachten wir das Beispiel des Einfügens eines Rasters in eine XPS Datei in Ihre C++-basierten Anwendungen. Sie können mit dieser Funktion arbeiten, indem Sie die folgenden Schritte berücksichtigen:

  1. Initialisiert das XpsDocument Klassenobjekt
  2. Geometrie für das Raster festlegen VisualBrush
  3. Erstellen Sie Canvas für Magenta-Gitter VisualBrush
  4. Erstellen Sie einen visuellen Pinsel und fügen Sie ein Raster hinzu
  5. Speichern Sie die XPS-Ausgabedatei

Der folgende Code basiert auf diesen Schritten, die erklären, wie man mit C++ ein Raster in XPS Dateien einfügt:

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

// Geometrie für Magenta-Gitter 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));

// Leinwand für Magenta-Gitter 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);

//Visual Brush erstellen, wird durch ein XPS-Fragment (Vektorgrafiken und Glyphen) angegeben
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);

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

// Raster hinzufügen
canvas->AddPath(gridPath);

// Rotes transparentes Rechteck in der Mitte oben
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);

// Speichern Sie das resultierende XPS-Dokument
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");

Einfügen eines transparenten Objekts in eine XPS Datei mit C++

Ein weiteres spannendes Feature für die Arbeit mit XPS Dateien ist die Unterstützung von Transparenz und Opazität. Möglicherweise müssen Sie in verschiedenen Szenarien transparente Objekte zur XPS Datei hinzufügen. Dies kann mit Hilfe der folgenden Schritte erreicht werden:

  1. Neues [XPS-Dokument] erstellen]11
  2. Pfad mit geschlossener Rechteckgeometrie erstellen
  3. Fügen Sie Geometrie für verschiedene Pfade hinzu
  4. XPS-Ausgabedokument speichern

Auf diese Schritte folgt der folgende Code, der zeigt, wie transparente Objekte in einer XPS Datei mit der Programmiersprache C++ hinzugefügt werden:

// Neues XPS-Dokument erstellen
auto doc = System::MakeObject<XpsDocument>();

// Nur um Transparenz zu demonstrieren
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()));

// Pfad mit geschlossener Rechteckgeometrie erstellen
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// Legen Sie den blauen Vollpinsel fest, um Pfad 1 zu füllen
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Fügen Sie es der aktuellen Seite hinzu
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// path1 und path2 sind gleich, sobald path1 in keinem anderen Element platziert wurde
// (was bedeutet, dass path1 kein übergeordnetes Element hatte).
// Aufgrund dieses Rechtecks wird die Farbe auf der Seite effektiv grün
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// Fügen Sie nun noch einmal path2 hinzu. Jetzt hat path2 einen Elternteil. Pfad3 ist also nicht dasselbe wie Pfad2.
// So wird ein neues Rechteck auf die Seite gemalt ...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ... und wir verschieben ihn 300 Einheiten tiefer ...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... und setzen Sie einen roten festen Pinsel, um ihn zu füllen
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));

// Erstellen Sie einen neuen Pfad4 mit der Geometrie von Pfad2 ...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... um 300 Einheiten nach rechts verschieben ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... und blaue feste Füllung setzen
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));

// Fügen Sie path4 noch einmal hinzu.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4 und path5 sind wieder nicht gleich ...
// (Bewegungspfad5 300 Einheiten niedriger)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// um den RenderTransform-Wert von path4 zu trennen (siehe nächster Kommentar zur Fill-Eigenschaft)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... aber wenn wir die Deckkraft der Fill-Eigenschaft festlegen, wirkt sich dies sowohl auf path5 als auch auf path4 aus
// weil brush ein komplexer Eigenschaftswert ist, der für path5 und path4 gleich bleibt
path5->get_Fill()->set_Opacity(0.8f);

// Erstellen Sie einen neuen Pfad6 mit der Geometrie von Pfad2 ...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... um 600 Einheiten nach rechts verschieben ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... und gelbe feste Füllung setzen
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));

// Fügen Sie jetzt den Klon von path6 hinzu ...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (Bewegungspfad5 300 Einheiten niedriger)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... und setze die Deckkraft für path7
path7->get_Fill()->set_Opacity(0.8f);
// Die Opazität wirkt sich jetzt unabhängig aus, sobald Eigenschaftswerte zusammen mit dem Element geklont werden

// Der folgende Codeblock entspricht dem vorherigen.
// Pfad6 selbst hinzufügen. path6 und path7 sind nicht identisch. Obwohl ihre Fill-Eigenschaftswerte identisch sind 
//XpsPath Pfad7 = doc.Add(Pfad6);
//path7.RenderTransform = path7.RenderTransform.Clone();
//path7.RenderTransform.Translate(0, 300);
// Um die Fill-Eigenschaft von path7 von der Fill-Eigenschaft von path6 zu "trennen", weisen Sie sie ihrem Klon (oder dem Fill-Klon von path6) neu zu.
//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
//path7.Fill.Deckkraft = 0,8f;

// Speichern Sie das resultierende XPS-Dokument
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

Fazit

Kurz gesagt, wir haben eine Reihe von Funktionen für die Arbeit mit XPS Dateien untersucht. Sie können einen linearen, horizontalen oder vertikalen Farbverlauf sowie Raster oder transparente Objekte in XPS Dateien hinzufügen. Darüber hinaus können Sie sich mehrere andere Funktionen ansehen, indem Sie das Beispielprojekt herunterladen. Im Falle von Unklarheiten können Sie uns gerne in den kostenlosen Support-Foren schreiben. Es wird uns eine Ehre sein, Sie zu führen!

Siehe auch