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é :
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 :
- Ajout d’un chemin rectangulaire (zone d’image) à remplir avec l’image ;
- Application d’un pinceau d’image à la zone d’image, où vous devez spécifier une zone d’affichage et une fenêtre. Généralement, vous aurez besoin de connaître la résolution et la taille en pixels de votre image pour fournir avec précision ces paramètres.
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é :