Работа с клипами в PS-файле | Java
Добавить обрезку в документ PS
Клип в документе PS — это путь, ограничивающий содержимое текущего состояния графики, которое будет отображаться в средстве просмотра или редакторе PS. Контент, выходящий за пределы, будет обрезан.
Путь обрезки в Java можно назначить тремя способами:
- любым реализованным классом java.awt.Shape, который может содержать любые замкнутые фигуры;
- по контуру текста;
- по 1 bpp (бит на пиксель) 2-цветное изображение в виде трафаретной маски;
На данный момент библиотека Aspose.Page для Java предлагает первый и второй способы отсечения.
В приведенном ниже примере мы получаем форму круга в качестве обтравочного контура и отсекаем прямоугольник с синей заливкой в том же графическом состоянии.
Чтобы добавить клип в новый PsDocument с помощью библиотеки Aspose.Page для Java, в этом примере мы выполняем следующие шаги:
- Создайте выходной поток для полученного PS-файла.
- Создайте объект PsSaveOptions с параметрами по умолчанию.
- Создайте одностраничный PsDocument с уже созданным потоком вывода и сохраните параметры.
- Создайте новое графическое состояние.
- Создайте фигуру круга (объект java.awt.geom.Ellipse2D).
- Установите клип по этому пути.
- Установите отрисовку текущего графического состояния PsDocument.
- Заполните прямоугольник текущей краской.
- Выход из текущего состояния графики на верхний уровень.
- Перевести на место закрашенный прямоугольник.
- Обведите пунктирной линией границы того же прямоугольника над закрашенным, чтобы показать границы обрезанного залитого прямоугольника.
- Закройте страницу.
- Сохраните документ.
1//Create an output stream for the PostScript document
2FileOutputStream outPsStream = new FileOutputStream(dataDir + "Clipping_outPS.ps");
3//Create save options with A4 size
4PsSaveOptions options = new PsSaveOptions();
5
6// Create a new PS Document with the page opened
7PsDocument document = new PsDocument(outPsStream, options, false);
8
9//Create a rectangle
10Shape rectangle = new Rectangle2D.Float(0, 0, 300, 200);
11
12//Set the paint in the upper level graphics state
13document.setPaint(Color.BLUE);
14
15//Save the graphics state to return back to this state after the transformation
16document.writeGraphicsSave();
17
18//Displace the current graphics state on 100 points to the right and 100 points to the bottom.
19document.translate(100, 100);
20
21//Create a circle shape
22Shape circle = new Ellipse2D.Float(50, 0, 200, 200);
23
24//Add clipping by the circle to the current graphics state
25document.clip(circle);
26
27//Fill the rectangle in the current graphics state (with clipping)
28document.fill(rectangle);
29
30//Restore the graphics state to the previus (upper) level
31document.writeGraphicsRestore();
32
33//Displace the upper-level graphics state on 100 points to the right and 100 points to the bottom.
34document.translate(100, 100);
35
36BasicStroke stroke = new BasicStroke(2,
37 BasicStroke.CAP_BUTT,
38 BasicStroke.JOIN_MITER,
39 10.0f, new float []{5.0f}, 0.0f);
40
41document.setStroke(stroke);
42
43//Draw the rectangle in the current graphics state (has no clipping) above the clipped rectangle
44document.draw(rectangle);
45
46//Close the current page
47document.closePage();
48//Save the document
49document.save();
См. работу с клипами в документах PS в .NET.
Результат выполнения этого кода выглядит так
В следующем примере мы получаем шрифт, используемый для обрезки прямоугольника с синей заливкой и контуром текста.
Чтобы добавить вырезку по тексту в новый PsDocument с помощью библиотеки Aspose.Page для Java в этом примере, мы выполняем следующие шаги:
- Создайте выходной поток для полученного PS-файла.
- Создайте объект PsSaveOptions с параметрами по умолчанию.
- Создайте одностраничный PsDocument с уже созданным потоком вывода и сохраните параметры.
- Создайте новое графическое состояние.
- Создайте шрифт.
- Установите клип с текстом и шрифтом.
- Установите отрисовку текущего графического состояния PsDocument.
- Заполните прямоугольник текущей краской.
- Выход из текущего состояния графики на верхний уровень.
- Перевести на место закрашенный прямоугольник.
- Обведите пунктирной линией границы того же прямоугольника над закрашенным, чтобы показать границы обрезанного залитого прямоугольника.
- Закройте страницу.
- Сохраните документ.
1//Create output stream for PostScript document
2FileOutputStream outPsStream = new FileOutputStream(dataDir + "Clipping_outPS.ps");
3//Create save options with A4 size
4PsSaveOptions options = new PsSaveOptions();
5
6// Create a new PS Document with the page opened
7PsDocument document = new PsDocument(outPsStream, options, false);
8
9//Create a rectangle
10Shape rectangle = new Rectangle2D.Float(0, 0, 300, 200);
11
12//Set paint in the upper-level graphics state
13document.setPaint(Color.BLUE);
14
15//Save graphics state to return back to this state after the transformation
16document.writeGraphicsSave();
17
18//Displace current graphics state on 100 points to the right and 100 points to the bottom.
19document.translate(100, 100);
20
21int fontSize = 120;
22Font font = new Font("Arial", Font.BOLD, fontSize);
23
24//Clip rectangle by text's outline
25document.clipText("ABC", font, 20, fontSize + 10);
26document.fill(rectangle);
27
28//Restore graphics state to the previous (upper) level
29document.writeGraphicsRestore();
30
31//Displace upper-level graphics state on 100 points to the right and 100 points to the bottom.
32document.translate(100, 100);
33
34BasicStroke stroke = new BasicStroke(2,
35 BasicStroke.CAP_BUTT,
36 BasicStroke.JOIN_MITER,
37 10.0f, new float []{5.0f}, 0.0f);
38
39document.setStroke(stroke);
40
41//Draw the rectangle in the current graphics state (has no clipping) above the clipped rectangle
42document.draw(rectangle);
43
44//Close the current page
45document.closePage();
46//Save the document
47document.save();
См. работу с клипами в документах PS в .NET.
Результат запуска этого кода выглядит как
Вы можете загрузить примеры и файлы данных с GitHub.