Utilizzo delle utilità grafiche XPS | Java

Come produrre facilmente forme base in XPS

La specifica XPS definisce elementi grafici primitivi che possono essere utilizzati per comporre qualsiasi forma complessa. Aspose.Page per Java fornisce classi che incapsulano questi elementi. Tuttavia, creare anche forme relativamente semplici, come un settore o un segmento circolare, o un n-gono regolare inscritto o circoscritto a un cerchio, può essere un po’ noioso. Anche disegnare un cerchio o un’ellisse non è così semplice come potrebbe essere. Per questo motivo, Aspose.Page offre anche una serie di metodi di utilità per risparmiare tempo durante queste attività.

Nell’esempio seguente, utilizziamo tutte le utilità per le forme disponibili. È importante notare che ciascuno di questi metodi di utilità restituisce un oggetto di tipo XpsPathGeometry, che può quindi essere utilizzato per creare percorsi XPS. Per questi percorsi è possibile specificare proprietà di aspetto: pennelli, pattern di tratto, opacità, ecc.

 1// For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-Java
 2// The path to the documents directory.
 3String dataDir = Utils.getDataDir();
 4// Create new XPS Document
 5final XpsDocument doc = new XpsDocument();
 6try {
 7    // Set first page's size.
 8    doc.getPage().setWidth(650f);
 9    doc.getPage().setHeight(240f);
10
11    // Draw a circle with center (120, 120) and radius 100.
12    XpsPath path = doc.createPath(doc.getUtils().createCircle(new Point2D.Float(120f, 120f), 100f));
13    path.setFill(doc.createSolidColorBrush(Color.GREEN));
14    doc.add(path);
15
16    // Inscribe a regular pentagon in the circle.
17    path = doc.createPath(doc.getUtils().createRegularInscribedNGon(5, new Point2D.Float(120f, 120f), 100f));
18    path.setFill(doc.createSolidColorBrush(Color.RED));
19    doc.add(path);
20
21    // Circumscribe a regular hexagon around the circle.
22    path = doc.createPath(doc.getUtils().createRegularCircumscribedNGon(6, new Point2D.Float(120f, 120f), 100f));
23    path.setStroke(doc.createSolidColorBrush(Color.MAGENTA));
24    path.setStrokeThickness(3f);
25    doc.add(path);
26
27    // Draw a sector of the circle centered at (340, 120), starting at -45 degrees and ending at +45 degrees.
28    path = doc.createPath(doc.getUtils().createPieSlice(new Point2D.Float(340f, 120f), 100f, -45f, 45f));
29    path.setStroke(doc.createSolidColorBrush(Color.RED));
30    path.setStrokeThickness(5f);
31    doc.add(path);
32
33    // Draw a segment of the circle centered at (340, 120), starting at -45 degrees and ending at +45 degrees.
34    path = doc.createPath(doc.getUtils().createCircularSegment(new Point2D.Float(340f, 120f), 100f, -45f, 45f));
35    path.setFill(doc.createSolidColorBrush(Color.BLACK));
36    doc.add(path);
37
38    // Draw a rectangle with the top left vertex (530, 20), width 100 units and height 200 units.
39    path = doc.createPath(doc.getUtils().createRectangle(new Rectangle2D.Float(530f, 20f, 100f, 200f)));
40    path.setStroke(doc.createSolidColorBrush(Color.RED));
41    doc.add(path);
42
43    // Draw an ellipse with center (580, 120) and radii 50 and 100.
44    path = doc.createPath(doc.getUtils().createEllipse(new Point2D.Float(580f, 120f), 50f, 100f));
45    path.setFill(doc.createSolidColorBrush(Color.YELLOW));
46    doc.add(path);
47
48    doc.save(dataDir + "UseShapeUtilsXPS_out.xps");
49} finally {
50  if (doc != null)
51    doc.close();
52}

Iniziamo creando un nuovo documento XPS e regolando le dimensioni della prima pagina. La prima forma che aggiungiamo alla pagina è un cerchio verde pieno specificato dal suo centro e raggio. Successivamente, disegniamo un pentagono regolare rosso vuoto inscritto in quel cerchio. Segue un esagono regolare tratteggiato in magenta e circoscritto al cerchio.

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

L’ultima parte del disegno include un rettangolo rosso (specificato dal suo angolo in alto a sinistra e dalle sue dimensioni) e un’ellisse gialla (specificata dal suo centro e dai suoi raggi) inscritta nel rettangolo. In questo caso, gestiamo l’iscrizione “a mano”.

Ecco l’output previsto nel file XPS salvato:

Utilità forme XPS

Come posizionare facilmente un’immagine su una pagina XPS

Quando si utilizzano le primitive definite dalla specifica XPS, il posizionamento di un’immagine su una pagina prevede due passaggi:

Fortunatamente, esiste un metodo pratico tra le utilità grafiche XPS nell’API Aspose.Page per Java che può gestire la maggior parte del lavoro. Offre anche modalità di adattamento comuni. Diamo un’occhiata al seguente esempio:

 1// For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-Java
 2// The path to the documents directory.
 3String dataDir = Utils.getDataDir();
 4// Create new XPS Document
 5final XpsDocument doc = new XpsDocument();
 6try {
 7    // Set first page's size.
 8    doc.getPage().setWidth(540f);
 9    doc.getPage().setHeight(220f);
10
11    // Draw the image box.
12    Rectangle2D imageBox = new Rectangle2D.Float(10f, 10f, 200f, 200f);
13    XpsPath path = doc.addPath(doc.getUtils().createRectangle(imageBox));
14    path.setStroke(doc.createSolidColorBrush(Color.BLACK));
15    // Add an image to fit width.
16    path = doc.getUtils().createImage(dataDir + "R08LN_NN.jpg", imageBox, ImageMode.FitToWidth);
17    // Prevent tiling.
18    ((XpsImageBrush)path.getFill()).setTileMode(XpsTileMode.None);
19    doc.add(path);
20
21    // Add an image to fit width.
22    doc.add(doc.getUtils().createImage(
23        dataDir + "R08LN_NN.jpg", new Rectangle2D.Float(220f, 10f, 200f, 100f), ImageMode.FitToHeight));
24
25    // Add an image to fit width.
26    doc.add(doc.getUtils().createImage(
27        dataDir + "R08LN_NN.jpg", new Rectangle2D.Float(430f, 10f, 100f, 200f), ImageMode.FitToBox));
28
29    // Save resultant XPS document 
30    doc.save(dataDir + "UseImageUtilsXPS_out.xps");
31} finally {
32  if (doc != null)
33    doc.close();
34}

Di nuovo, iniziamo con un nuovo documento XPS e ridimensioniamo la prima pagina. Vale la pena ricordare che, per impostazione predefinita, l’immagine utilizzata come pennello verrà visualizzata a mosaico nel riquadro dell’immagine, proprio come se fosse utilizzata in modalità XpsTileMode.Tile. Tuttavia, nella prima parte dell’esempio, mostriamo come impedire questo effetto di piastrellatura.

Quindi, vogliamo innanzitutto che l’immagine venga visualizzata alle coordinate (10, 10) e che si adatti alla larghezza del riquadro rettangolare, che è 200 unità di larghezza e 200 unità di altezza. Per visualizzare meglio il risultato, disegniamo prima il riquadro stesso. Quindi, procediamo a creare l’immagine (che è essenzialmente un tracciato riempito). Infine, dopo aver ottenuto il riempimento del tracciato e averlo assegnato a XpsImageBrush, impostiamo la proprietà TileMode su XpsTileMode.None.

A destra, posizioniamo la stessa immagine adattandola all’altezza del riquadro immagine. Notate l’effetto di piastrellatura.

Infine, posizioniamo nuovamente la stessa immagine a destra e la regoliamo per adattarla sia all’altezza che alla larghezza del riquadro immagine, con conseguente distorsione dell’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.