Робота з обрізанням і контурами обрізання в документах PostScript (PS) у Java
Визначайте, застосовуйте та керуйте векторними контурами обрізання в документах PostScript (PS/EPS) за допомогою Aspose.Page for Java. Обмежуйте операції малювання, відтворення тексту та відображення зображень довільними замкнутими геометричними межами. Ефективно керуйте локальними та глобальними областями обрізання за допомогою стеків графічного стану PostScript (writeGraphicsSave/writeGraphicsRestore) для створення складних візуальних ефектів із маскуванням.
Aspose.Page for Java використовує примітиви java.awt.Shape мови Java для зміни поточного контуру обрізання в стані візуалізації PsDocument.
- Щоб застосувати обрізання, яке перетинає поточний контур обрізання з межею наданої геометричної форми, використовуйте метод
PsDocument.writeGraphicsSave(). - Щоб помістити поточний графічний стан, включно з активними межами обрізання, у стек станів, використовуйте метод
PsDocument.writeGraphicsSave(). - Щоб відновити графічний стан, вилучивши верхній графічний стан зі стеку та повернувши область обрізання до попереднього стану, використовуйте метод
PsDocument.writeGraphicsRestore(). - Щоб обрізати форми, використовуючи будь-який стандартний або складний замкнутий векторний контур як область обрізання, використовуйте
Rectangle2D,Ellipse2D,Path2D.
Застосування обрізання простої форми (прямокутник або еліпс)
Обмежуйте операції роботи з текстом або векторною графікою, щоб вони залишалися строго всередині базової геометричної форми.
import com.aspose.page.eps.PsDocument;
import com.aspose.page.eps.device.PsSaveOptions;
import java.awt.Color;
import java.awt.Font;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.io.FileOutputStream;
public class BasicClippingPS {
public static void main(String[] args) throws Exception {
// Initialize output stream and PS document
FileOutputStream outStream = new FileOutputStream("C:/PSProject/Output/basic_clipping.ps");
PsSaveOptions options = new PsSaveOptions();
PsDocument document = new PsDocument(outStream, options, 1);
document.openPage(null);
// Define a clipping shape (Circle boundary)
Ellipse2D clipShape = new Ellipse2D.Float(100, 100, 200, 200);
// Save state before clipping
document.writeGraphicsSave();
// Apply clip shape
document.clip(clipShape);
// Draw a large rectangle that extends past the clip boundary
document.setPaint(Color.BLUE);
document.fill(new Rectangle2D.Float(50, 50, 300, 300)); // Only the circle area gets rendered
// Restore state to release clip
document.writeGraphicsRestore();
document.closePage();
document.save();
outStream.close();
System.out.println("Basic clip applied successfully to PostScript document.");
}
}Керування вкладеними областями обрізання за допомогою графічних станів
Ізолюйте локальні межі обрізання та запобігайте збереженню обрізання між елементами сторінки, обгортаючи операції обрізання в блоки writeGraphicsSave() і writeGraphicsRestore().
import com.aspose.page.eps.PsDocument;
import com.aspose.page.eps.device.PsSaveOptions;
import java.awt.Color;
import java.awt.geom.Rectangle2D;
import java.io.FileOutputStream;
public class NestedClippingPS {
public static void main(String[] args) throws Exception {
FileOutputStream outStream = new FileOutputStream("C:/PSProject/Output/nested_clipping.ps");
PsSaveOptions options = new PsSaveOptions();
PsDocument document = new PsDocument(outStream, options, 1);
document.openPage(null);
// Outer graphic state
document.writeGraphicsSave();
// Intersect First Clip (Outer Box)
document.clip(new Rectangle2D.Float(100, 100, 200, 200));
// Inner graphic state
document.writeGraphicsSave();
// Intersect Second Clip (Inner Box - creates combined intersection)
document.clip(new Rectangle2D.Float(150, 150, 200, 200));
// Fill combined intersection region
document.setPaint(Color.RED);
document.fill(new Rectangle2D.Float(0, 0, 500, 500));
// Restore back to single outer box clip
document.writeGraphicsRestore();
// Restore back to unclipped original page state
document.writeGraphicsRestore();
document.closePage();
document.save();
outStream.close();
System.out.println("Nested clip states processed successfully.");
}
}Обрізання складного тексту та векторних контурів
Використовуйте користувацькі форми, створені за допомогою Path2D, як динамічні маски для фонових зображень із візерунками або кількома кольорами.
import com.aspose.page.eps.PsDocument;
import com.aspose.page.eps.device.PsSaveOptions;
import java.awt.Color;
import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D;
import java.io.FileOutputStream;
public class ComplexPathClippingPS {
public static void main(String[] args) throws Exception {
FileOutputStream outStream = new FileOutputStream("C:/PSProject/Output/complex_clip.ps");
PsSaveOptions options = new PsSaveOptions();
PsDocument document = new PsDocument(outStream, options, 1);
document.openPage(null);
// Construct a custom triangle path for clipping
Path2D triangleClip = new Path2D.Float();
triangleClip.moveTo(250, 100);
triangleClip.lineTo(400, 350);
triangleClip.lineTo(100, 350);
triangleClip.closePath();
document.writeGraphicsSave();
// Apply custom path clip
document.clip(triangleClip);
// Render overlapping colored stripes inside the triangle boundary
Color[] colors = { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW };
for (int i = 0; i < colors.length; i++) {
document.setPaint(colors[i]);
document.fill(new Rectangle2D.Float(100, 100 + (i * 60), 300, 50));
}
document.writeGraphicsRestore();
document.closePage();
document.save();
outStream.close();
System.out.println("Complex vector path clip applied successfully.");
}
}Встановлення та налаштування
Додайте Aspose.Page for Java до свого Maven:
Package Manager Console Command
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-page</artifactId>
<version>Latest</version>
</dependency>
FAQ
1. Як PsDocument.clip(Shape) змінює поточну область відсікання?
Виклик clip(Shape) перетинає вказану фігуру з наявним контуром відсікання в контексті виконання PostScript. Він не замінює контур відсікання повністю, якщо спочатку не відновити стан.
2. Як видалити або скинути контур відсікання в PostScript?
Оскільки PostScript накопичує області відсікання шляхом перетину, ви не можете безпосередньо «видалити» контур відсікання. Натомість збережіть стан за допомогою document.writeGraphicsSave() перед застосуванням відсікання та відновіть його за допомогою document.writeGraphicsRestore(), коли завершите роботу.
3. Чи можу я використовувати довільні фігури, наприклад контури тексту або криві шляхи, для відсікання?
Так. Будь-яку реалізацію Java java.awt.Shape — зокрема Path2D, криволінійні фігури Безьє та перетворені векторні контури тексту — можна безпосередньо передати до document.clip().