Використання графічних утиліт XPS | Java

Як легко створювати основні форми в XPS

Специфікація XPS визначає графічні примітивні елементи, які можна використовувати для створення будь-яких складних форм. Aspose.Page для Java надає класи, що інкапсулюють ці елементи. Однак створення навіть відносно простих фігур, таких як круговий сектор чи сегмент, або правильний n-кутник, вписаний у коло або описаний навколо нього, може бути трохи виснажливим. Навіть намалювати коло чи еліпс не так просто, як могло б бути. Ось чому Aspose.Page також пропонує набір службових методів, які допоможуть заощадити час під час роботи над цими завданнями.

У прикладі нижче ми використовуємо всі доступні утиліти форми. Важливо зазначити, що кожен із цих методів утиліти повертає об’єкт XpsPathGeometry, який потім можна використовувати для створення шляхів XPS. І для цих контурів ви можете вказати властивості зовнішнього вигляду - пензлі, візерунок обведення, непрозорість тощо.

 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}

Ми починаємо зі створення нового документа XPS, а потім регулюємо розмір першої сторінки. Перша фігура, яку ми додаємо на сторінку, — суцільний зелений круг, визначений його центром і радіусом. Далі ми малюємо незафарбований червоним правильний п’ятикутник, вписаний у це коло. Потім йде правильний шестикутник, обведений пурпуровим кольором і описаний навколо кола.

Праворуч ми малюємо червоний круговий сектор (або «скибочку пирога») між -45 і +45 градусами, а потім чорний круговий сегмент з такими ж параметрами поверх сектора.

Остання частина креслення містить червоний прямокутник (зазначений верхнім лівим кутом і розмірами) і жовтий еліпс (зазначений його центром і радіусами), вписаний у прямокутник. В даному випадку обробляємо напис «від руки».

Ось очікуваний вихід у збереженому файлі XPS:

Утиліти XPS shapes

Як легко розмістити зображення на сторінці XPS

При використанні примітивів, визначених специфікацією XPS, розміщення зображення на сторінці включає два кроки:

Але, на щастя, серед графічних утиліт XPS в API Aspose.Page для Java є зручний метод, який може впоратися з більшою частиною роботи за вас. Він також пропонує стандартні режими підгонки. Давайте розглянемо наступний приклад:

 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}

Знову ми починаємо з нового документа XPS і змінюємо розмір першої сторінки. Варто зазначити, що за замовчуванням ваше зображення, яке використовується як пензель, розміщуватиметься по полі зображення так само, як якщо б воно використовувалося в режимі XpsTileMode.Tile. Однак у першій частині прикладу ми показуємо, як запобігти цій мозаїці. Отже, спочатку ми хочемо, щоб зображення відображалося в координатах (10, 10) і відповідало ширині прямокутної рамки, яка становить 200 одиниць завширшки та 200 одиниць заввишки. Щоб краще уявити результат, спочатку малюємо саму коробку. Потім ми переходимо до створення зображення (яке, по суті, є заповненим контуром). Нарешті, після отримання заливки шляху та його приведення до XpsImageBrush, ми встановлюємо для властивості TileMode значення XpsTileMode.None.

Праворуч ми розміщуємо те саме зображення, що відповідає висоті вікна зображення. Зверніть увагу на ефект плитки.

Нарешті, ми знову розміщуємо те саме зображення праворуч і регулюємо його, щоб відповідати висоті та ширині рамки зображення, що призводить до деякого спотворення зображення.

А ось результат у збереженому файлі XPS:

Утиліти для зображень XPS

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.