Trabajar con recortes y trazados de recorte en documentos PostScript (PS) con Java
Defina, aplique y administre trazados de recorte vectoriales en documentos PostScript (PS/EPS) mediante Aspose.Page for Java. Restrinja las operaciones de dibujo, renderizado de texto y visualización de imágenes a límites geométricos cerrados arbitrarios. Administre de forma eficiente las regiones de recorte locales y globales mediante pilas de estados gráficos de PostScript (writeGraphicsSave/writeGraphicsRestore) para crear efectos visuales complejos de enmascaramiento.
Aspose.Page for Java utiliza las primitivas java.awt.Shape de Java para modificar el trazado de recorte actual dentro del estado de renderizado de PsDocument.
- Para aplicar recortes que intersequen el trazado de recorte actual con el límite de la forma geométrica proporcionada, utilice el método
PsDocument.writeGraphicsSave(). - Para guardar el estado gráfico actual, incluidas las regiones de recorte activas, en la pila de estados, utilice el método
PsDocument.writeGraphicsSave(). - Para restaurar el estado gráfico, lo que extrae el estado gráfico superior de la pila y restablece el área de recorte a su estado anterior, utilice el método
PsDocument.writeGraphicsRestore(). - Para recortar formas utilizando cualquier trazado vectorial cerrado estándar o complejo como región de recorte, utilice
Rectangle2D,Ellipse2D,Path2D.
Aplicar un recorte con una forma simple (rectángulo o elipse)
Restrinja las operaciones de dibujo de texto o vectores para que permanezcan estrictamente dentro de una forma geométrica básica.
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.");
}
}Administrar regiones de recorte anidadas con estados gráficos
Aísle los límites de recorte locales y evite que el recorte persista entre los elementos de la página encapsulando las operaciones de recorte dentro de bloques de writeGraphicsSave() y 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.");
}
}Recortar texto complejo y trazados vectoriales
Utilice formas personalizadas construidas con Path2D como máscaras dinámicas para fondos con patrones o de varios colores.
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.");
}
}Instalación y configuración
Agregue Aspose.Page for Java a su 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>
Preguntas frecuentes
1. ¿Cómo modifica PsDocument.clip(Shape) la región de recorte actual?
La llamada a clip(Shape) intersecta la forma especificada con la ruta de recorte existente en el contexto de ejecución de PostScript. No reemplaza completamente la ruta de recorte a menos que primero se restaure el estado.
2. ¿Cómo puedo eliminar o restablecer una ruta de recorte en PostScript?
Debido a que PostScript acumula los recortes mediante intersecciones, no se puede ’eliminar’ directamente una ruta de recorte. En su lugar, guarde el estado con document.writeGraphicsSave() antes de aplicar el recorte y restáurelo con document.writeGraphicsRestore() cuando haya terminado.
3. ¿Puedo utilizar formas arbitrarias, como contornos de texto o rutas curvas, para realizar recortes?
Sí. Cualquier implementación de Java java.awt.Shape, incluidas Path2D, las formas Bézier curvas y los contornos vectoriales de texto convertidos, se puede pasar directamente a document.clip().