Utilizzo delle utilità grafiche XPS | .NET

Come produrre facilmente forme semplici in XPS

La specifica XPS definisce elementi primitivi grafici che possono essere utilizzati per comporre qualsiasi forma complessa. Aspose.Page per .NET fornisce classi che incapsulano questi elementi. Tuttavia, utilizzarli può essere un po’ noioso quando si devono produrre anche forme relativamente semplici, come un settore circolare o un segmento, o un n-gono regolare inscritto o circoscritto a un cerchio. Anche disegnare un cerchio o un’ellisse non è così semplice come potrebbe e probabilmente dovrebbe essere. Per questo motivo Aspose.Page fornisce anche una serie di metodi di utilità che molto probabilmente vi faranno risparmiare tempo durante l’esecuzione di tali attività.

Nell’esempio seguente, utilizziamo tutte le utilità per le forme disponibili. Si noti che tutti restituiscono un oggetto di tipo XpsPathGeometry, che può quindi essere utilizzato per costruire percorsi XPS. Per questi percorsi è possibile specificare le proprietà di aspetto: pennelli, pattern di tratto, opacità, ecc.

 1// Using shape utilities for adding shapes to XPS document.
 2
 3string outputFileName = "UseShapeUtilsXPS_out.xps";
 4
 5// Create new XPS Document
 6using (XpsDocument doc = new XpsDocument())
 7{
 8    // Set first page's size.
 9    doc.Page.Width = 650f;
10    doc.Page.Height = 240f;
11
12    // Draw a circle with center (120, 120) and radius 100.
13    XpsPath path = doc.CreatePath(doc.Utils.CreateCircle(new PointF(120f, 120f), 100f));
14    path.Fill = doc.CreateSolidColorBrush(Color.Green);
15    doc.Add(path);
16
17    // Inscribe a regular pentagon in the circle.
18    path = doc.CreatePath(doc.Utils.CreateRegularInscribedNGon(5, new PointF(120f, 120f), 100f));
19    path.Fill = doc.CreateSolidColorBrush(Color.Red);
20    doc.Add(path);
21
22    // Circumscribe a regular hexagon around the circle.
23    path = doc.CreatePath(doc.Utils.CreateRegularCircumscribedNGon(6, new PointF(120f, 120f), 100f));
24    path.Stroke = doc.CreateSolidColorBrush(Color.Magenta);
25    path.StrokeThickness = 3f;
26    doc.Add(path);
27
28    // Draw a sector of the circle centered at (340, 120), starting at -45 degrees and ending at +45 degrees.
29    path = doc.CreatePath(doc.Utils.CreatePieSlice(new PointF(340f, 120f), 100f, -45f, 45f));
30    path.Stroke = doc.CreateSolidColorBrush(Color.Red);
31    path.StrokeThickness = 5f;
32    doc.Add(path);
33
34    // Draw a segment of the circle centered at (340, 120), starting at -45 degrees and ending at +45 degrees.
35    path = doc.CreatePath(doc.Utils.CreateCircularSegment(new PointF(340f, 120f), 100f, -45f, 45f));
36    path.Fill = doc.CreateSolidColorBrush(Color.Black);
37    doc.Add(path);
38
39    // Draw a rectangle with the top left vertex (530, 20), width 100 units and height 200 units.
40    path = doc.CreatePath(doc.Utils.CreateRectangle(new RectangleF(530f, 20f, 100f, 200f)));
41    path.Stroke = doc.CreateSolidColorBrush(Color.Red);
42    doc.Add(path);
43
44    // Draw an ellipse with center (580, 120) and radii 50 and 100.
45    path = doc.CreatePath(doc.Utils.CreateEllipse(new PointF(580f, 120f), 50f, 100f));
46    path.Fill = doc.CreateSolidColorBrush(Color.Yellow);
47    doc.Add(path);
48
49    doc.Save(OutputDir + outputFileName);
50}

Iniziamo con un nuovo documento XPS, modificando poi le dimensioni della prima pagina. La prima forma che posizioniamo sulla pagina è un cerchio (specificato dal suo centro e raggio) riempito di verde pieno. Successivamente, inscriviamo un pentagono regolare rosso vuoto in quel cerchio. Segue poi un esagono regolare circoscritto con un contorno magenta.

A destra, disegniamo prima un settore circolare rosso (o una “fetta di torta”) tra -45 e +45 gradi, e poi un segmento circolare nero con gli stessi parametri sopra il settore.

L’ultima parte del disegno consiste in un rettangolo rosso (specificato dal vertice in alto a sinistra e dalle dimensioni) e un’ellisse gialla (specificata dal centro e dai raggi), inscritti nel rettangolo. Qui, controlliamo l’iscrizione “a mano”.

Ecco cosa dovremmo vedere nel file XPS salvato:

Utilità forme XPS

Come aggiungere facilmente un’immagine a una pagina XPS

Con le primitive definite dalla specifica XPS, l’aggiunta di un’immagine a una pagina consiste in due passaggi:

Fortunatamente, esiste un metodo pratico tra le utilità grafiche XPS dell’API Aspose.Page per .NET che può svolgere (quasi) tutto il lavoro per voi. Offre anche diverse modalità di adattamento. Diamo un’occhiata all’esempio seguente:

 1// Using image utilities for adding images to XPS document.
 2
 3string outputFileName = "UseImageUtilsXPS_out.xps";
 4
 5// Create new XPS Document
 6using (XpsDocument doc = new XpsDocument())
 7{
 8    // Set first page's size.
 9    doc.Page.Width = 540f;
10    doc.Page.Height = 220f;
11
12    // Draw the image box.
13    RectangleF imageBox = new RectangleF(10f, 10f, 200f, 200f);
14    XpsPath path = doc.AddPath(doc.Utils.CreateRectangle(imageBox));
15    path.Stroke = doc.CreateSolidColorBrush(Color.Black);
16    // Add an image to fit width.
17    path = doc.Utils.CreateImage(DataDir + "R08LN_NN.jpg", imageBox, ImageMode.FitToWidth);
18    // Prevent tiling.
19    ((XpsImageBrush)path.Fill).TileMode = XpsTileMode.None;
20    doc.Add(path);
21
22    // Add an image to fit width.
23    doc.Add(doc.Utils.CreateImage(DataDir + "R08LN_NN.jpg", new RectangleF(220f, 10f, 200f, 100f), ImageMode.FitToHeight));
24
25    // Add an image to fit width.
26    doc.Add(doc.Utils.CreateImage(DataDir + "R08LN_NN.jpg", new RectangleF(430f, 10f, 100f, 200f), ImageMode.FitToBox));
27
28    // Save resultant XPS document 
29    doc.Save(OutputDir + outputFileName);
30}

Di nuovo, iniziamo con un nuovo documento XPS e regoliamo le dimensioni della prima pagina. È importante notare a questo punto che, per impostazione predefinita, l’immagine utilizzata come pennello verrà suddivisa in tile sull’area rettangolare, proprio come se fosse utilizzata in modalità XpsTileMode.Tile. Tuttavia, nella prima parte dell’esempio, mostriamo come impedire questo tile.

Quindi, vogliamo innanzitutto che l’immagine appaia in (10, 10) e che si adatti alla larghezza del riquadro rettangolare, che è 200 unità di larghezza e 200 unità di altezza. Per visualizzare il risultato più chiaramente, disegniamo prima il riquadro stesso. Successivamente, creiamo l’immagine (si noti che in realtà è un tracciato riempito). Infine, dopo aver ottenuto il riempimento del tracciato e averlo convertito in XpsImageBrush, impostiamo la proprietà TileMode su XpsTileMode.None.

A destra, posizioniamo la stessa immagine e la adattiamo all’altezza del riquadro immagine. Notate la piastrellatura.

Infine, posizioniamo di nuovo la stessa immagine a destra e la adattiamo sia all’altezza che alla larghezza del riquadro immagine, distorcendo l’immagine.

Ed ecco il risultato nel file XPS salvato:

Utilità immagine XPS

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.