Використання графічних утиліт 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
При використанні примітивів, визначених специфікацією 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: