
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++
- Aggiunta di gradiente nel file XPS utilizzando C++
- Inserisci la griglia nel file XPS con C++
- Inserisci Transparent Object nel file XPS usando C++
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:
- Crea un nuovo Documento XPS
- Inizializza elenco di XpsGradientStop
- Crea un nuovo percorso definendo la geometria
- 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:
- Crea un nuovo documento XPS
- Specificare le interruzioni del gradiente utilizzando XpsGradientStop
- Crea un percorso con la geometria
- 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:
- Inizializza l’oggetto classe XpsDocument
- Specificare la geometria per la griglia VisualBrush
- Crea Canvas per la griglia magenta VisualBrush
- Crea pennello visivo e aggiungi griglia
- 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:
- Crea nuovo Documento XPS
- Crea un percorso con una geometria a rettangolo chiuso
- Aggiungi geometria per percorsi diversi
- 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!