Utilisation des utilitaires graphiques XPS | Java

Comment produire facilement des formes de base dans XPS

La spécification XPS définit des éléments graphiques primitifs qui peuvent être utilisés pour composer n’importe quelle forme complexe. Aspose.Page pour Java fournit des classes encapsulant ces éléments. Cependant, créer même des formes relativement simples, comme un secteur ou un segment circulaire, ou un n-gon régulier inscrit ou circonscrit autour d’un cercle, peut être un peu fastidieux. Même dessiner un cercle ou une ellipse n’est pas aussi simple qu’il pourrait l’être. C’est pourquoi Aspose.Page propose également un ensemble de méthodes utilitaires pour vous aider à gagner du temps lorsque vous travaillez sur ces tâches.

Dans l’exemple ci-dessous, nous utilisons tous les utilitaires de forme disponibles. Il est important de noter que chacune de ces méthodes utilitaires renvoie un objet de XpsPathGeometry, qui peut ensuite être utilisé pour créer des chemins XPS. Et pour ces chemins, vous pouvez spécifier les propriétés d’apparence - pinceaux, motif de trait, opacité, etc.

 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}

Nous commençons par créer un nouveau document XPS puis ajustons la taille de la première page. La première forme que nous ajoutons à la page est un cercle vert plein spécifié par son centre et son rayon. Ensuite, nous dessinons un pentagone régulier rouge non rempli inscrit dans ce cercle. Vient ensuite un hexagone régulier caressé de magenta et circonscrit autour du cercle.

À droite, nous dessinons un secteur circulaire rouge (ou une « tranche de tarte ») entre -45 et +45 degrés, suivi d’un segment circulaire noir avec les mêmes paramètres au-dessus du secteur.

La dernière partie du dessin comprend un rectangle rouge (précisé par son coin supérieur gauche et ses dimensions) et une ellipse jaune (précisée par son centre et ses rayons) inscrite dans le rectangle. Dans ce cas, nous traitons l’inscription “à la main”.

Voici le résultat attendu dans le fichier XPS enregistré :

Utilitaires de formes XPS

Comment placer facilement une image sur une page XPS

Lors de l’utilisation de primitives définies par la spécification XPS, le placement d’une image sur une page implique deux étapes :

Mais heureusement, parmi les utilitaires graphiques XPS de l’API Aspose.Page pour Java, il existe une méthode pratique qui peut gérer la plupart du travail à votre place. Il vous propose également des modes d’ajustement courants. Regardons l’exemple suivant :

 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}

Encore une fois, nous commençons avec un nouveau document XPS et redimensionnons la première page. Il convient de mentionner ici que par défaut, votre image utilisée comme pinceau sera disposée en mosaïque dans la zone d’image de la même manière que si elle était utilisée en mode XpsTileMode.Tile. Cependant, dans la première partie de l’exemple, nous montrons comment éviter ce pavage.

Nous voulons donc d’abord que l’image soit affichée aux coordonnées (10, 10) et qu’elle s’adapte à la largeur de la boîte rectangulaire, qui mesure 200 unités de largeur et 200 unités de hauteur. Pour mieux visualiser le résultat, nous dessinons d’abord la boîte elle-même. Ensuite, nous procédons à la création de l’image (qui est essentiellement un chemin rempli). Enfin, après avoir obtenu le remplissage du chemin et l’avoir converti en XpsImageBrush, nous définissons la propriété TileMode sur XpsTileMode.None.

À droite, nous plaçons la même image en fonction de la hauteur de la zone d’image. Remarquez l’effet de carrelage.

Enfin, nous plaçons à nouveau la même image vers la droite et l’ajustons pour l’adapter à la fois à la hauteur et à la largeur de la zone d’image, ce qui entraîne une certaine distorsion de l’image.

Et voici le résultat dans le fichier XPS enregistré :

Utilitaires d’images XPS

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.