Aggiungi Gradient Grid Transparency XPS

I file XPS possono essere utilizzati per visualizzare molte informazioni visive. Supportano testo, immagini, trasparenza degli oggetti, griglie, gradienti e molte altre funzionalità. Puoi inserire oggetti sfumati, griglia e trasparenti nei file XPS secondo le tue esigenze. In questo articolo, esploreremo queste funzionalità in dettaglio, insieme a diversi esempi e casi d’uso. Esaminiamo i seguenti argomenti:

Installazione dell’API XPS per C++

Puoi configurare rapidamente e facilmente l’API Aspose.Page for C++ nelle tue applicazioni di programmazione per manipolare XPS, PS, EPS e altri formati di file supportati. Basta scaricare il file DLL da Download ufficiali o installarlo dalla galleria NuGet con il comando seguente:

PM> Install-Package Aspose.Page.Cpp 

Aggiunta di gradiente nel file XPS utilizzando C++

A volte è necessario aggiungere gradiente nei file XPS. Puoi manipolare il file XPS poiché l’API ti consente di aggiungere un gradiente lineare, orizzontale e verticale. Aggiungiamo i seguenti gradienti in un file XPS:

Aggiungi gradiente verticale nel file XPS con C++

Puoi facilmente aggiungere una sfumatura verticale nei file XPS con poche semplici chiamate API. Di seguito sono riportati i passaggi per aggiungere il gradiente verticale:

  1. Crea un nuovo Documento XPS
  2. Inizializza elenco di XpsGradientStop
  3. Crea un nuovo percorso definendo la geometria
  4. Salva il documento XPS risultante

Il codice seguente si basa su questi passaggi, che dimostrano come aggiungere una sfumatura verticale in un file XPS utilizzando C++:

// Crea un nuovo documento XPS
auto doc = System::MakeObject<XpsDocument>();

// Inizializza l'elenco di 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));

// Crea un nuovo percorso definendo la geometria in forma abbreviata
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);

// Salva il documento XPS risultante
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");

Aggiungi gradiente orizzontale in XPS usando C++

Un’altra possibile variazione del gradiente nei file XPS è il gradiente orizzontale. L’approccio dell’aggiunta del gradiente orizzontale è un po’ correlato al caso d’uso che abbiamo discusso sopra. Di seguito sono riportati i passaggi da seguire per aggiungere il gradiente orizzontale:

  1. Crea un nuovo documento XPS
  2. Specificare le interruzioni del gradiente utilizzando XpsGradientStop
  3. Crea un percorso con la geometria
  4. Salva il documento XPS di output

Il seguente frammento di codice spiega come aggiungere una sfumatura orizzontale nei file XPS usando C++:

// Crea un nuovo documento XPS
auto doc = System::MakeObject<XpsDocument>();

// Inizializza l'elenco di 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));

// Crea un nuovo percorso definendo la geometria in forma abbreviata
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);

// Salva il documento XPS risultante
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");

Inserisci la griglia nel file XPS con C++

Aspose.Page per l’API C++ ti consente di eseguire il rendering delle griglie nei file XPS con molte proprietà per controllare il rendering. Consideriamo l’esempio dell’inserimento della griglia nel file XPS nelle applicazioni basate su C++. Puoi lavorare con questa funzione considerando i passaggi seguenti:

  1. Inizializza l’oggetto classe XpsDocument
  2. Specificare la geometria per la griglia VisualBrush
  3. Crea Canvas per la griglia magenta VisualBrush
  4. Crea pennello visivo e aggiungi griglia
  5. Salva il file XPS di output

Il codice seguente si basa su questi passaggi che spiegano come inserire la griglia nei file XPS utilizzando C++:

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

// Geometria per griglia 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));

// Tela per griglia 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);

//Crea pennello visivo, è specificato da un frammento XPS (grafica vettoriale e glifi)
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);

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

// Aggiungi griglia
canvas->AddPath(gridPath);

// Rettangolo rosso trasparente al centro in alto
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);

// Salva il documento XPS risultante
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");

Inserisci Transparent Object nel file XPS usando C++

Un’altra caratteristica interessante per lavorare con i file XPS è il supporto per trasparenza e opacità. Potrebbe essere necessario aggiungere oggetti trasparenti al file XPS in diversi scenari. Questo può essere ottenuto con l’aiuto dei seguenti passaggi:

  1. Crea nuovo Documento XPS
  2. Crea un percorso con una geometria a rettangolo chiuso
  3. Aggiungi geometria per percorsi diversi
  4. Salva il documento XPS di output

Questi passaggi sono seguiti dal codice seguente, che mostra come aggiungere oggetti trasparenti in un file XPS con il linguaggio di programmazione C++:

// Crea un nuovo documento XPS
auto doc = System::MakeObject<XpsDocument>();

// Giusto per dimostrare trasparenza
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()));

// Crea un percorso con una geometria a rettangolo chiuso
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// Imposta il pennello solido blu per riempire il percorso1
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Aggiungilo alla pagina corrente
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// path1 e path2 sono gli stessi non appena path1 non è stato posizionato all'interno di nessun altro elemento
// (il che significa che path1 non aveva alcun elemento padre).
// A causa del colore di quel rettangolo sulla pagina diventa effettivamente verde
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// Ora aggiungi di nuovo path2. Ora path2 ha genitore. Quindi path3 non sarà lo stesso di path2.
// Così un nuovo rettangolo viene dipinto sulla pagina ...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ... e lo spostiamo di 300 unità più in basso ...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... e imposta il pennello rosso solido per riempirlo
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));

// Crea nuovo path4 con la geometria di path2...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... spostalo di 300 unità a destra ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... e imposta il riempimento a tinta unita blu
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));

// Aggiungi path4 ancora una volta.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4 e path5 non sono più gli stessi...
// (sposta percorso5 300 unità più in basso)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// per disconnettere il valore RenderTransform da path4 (vedi il prossimo commento sulla proprietà Fill)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... ma se impostiamo l'opacità della proprietà Fill, avrà effetto sia su path5 che su path4
// perché brush è un valore di proprietà complesso che rimane lo stesso per path5 e path4
path5->get_Fill()->set_Opacity(0.8f);

// Crea un nuovo percorso6 con la geometria di percorso2 ...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... spostalo di 600 unità a destra ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... e imposta il riempimento solido giallo
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));

// Ora aggiungi il clone di path6 ...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (sposta percorso5 300 unità più in basso)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... e imposta l'opacità per path7
path7->get_Fill()->set_Opacity(0.8f);
// Ora l'opacità ha effetti indipendenti non appena i valori delle proprietà vengono clonati insieme all'elemento

// Il blocco di codice seguente è equivalente al precedente.
// Aggiungi path6 stesso. percorso6 e percorso7 non sono gli stessi. Sebbene i loro valori di proprietà Fill siano gli stessi 
//XpsPath percorso7 = doc.Add(percorso6);
//percorso7.RenderTransform = percorso7.RenderTransform.Clone();
//percorso7.RenderTransform.Translate(0, 300);
// Per "disconnettere" la proprietà Fill di path7 dalla proprietà Fill di path6, riassegnarla al suo clone (o al clone Fill di path6)
//percorso7.Riempimento = ((XpsSolidColorBrush)percorso7.Riempimento).Clone();
//path7.Fill.Opacity = 0.8f;

// Salva il documento XPS risultante
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

Conclusione

In poche parole, abbiamo esplorato una serie di funzionalità per lavorare con i file XPS. Puoi aggiungere una sfumatura, lineare, orizzontale o verticale, nonché griglie o oggetti trasparenti nei file XPS. Inoltre, puoi dare un’occhiata a molte altre funzionalità scaricando il Progetto Esempi. In caso di ambiguità, non esitare a scriverci nei Forum di supporto gratuito. Saremo onorati di guidarti!

Guarda anche