Lavorare con i ritagli e i tracciati di ritaglio nei documenti PostScript (PS) con Java
Definisci, applica e gestisci tracciati di ritaglio vettoriali nei documenti PostScript (PS/EPS) utilizzando Aspose.Page for Java. Limita le operazioni di disegno, rendering del testo e visualizzazione delle immagini all’interno di confini geometrici chiusi arbitrari. Gestisci in modo efficiente le aree di ritaglio locali e globali utilizzando gli stack dello stato grafico di PostScript (writeGraphicsSave/writeGraphicsRestore) per creare effetti visivi complessi di mascheratura.
Aspose.Page for Java utilizza le primitive java.awt.Shape di Java per modificare il tracciato di ritaglio corrente nello stato di rendering di PsDocument.
- Per applicare ritagli che intersecano il tracciato di ritaglio corrente con il contorno della forma geometrica fornita, utilizzare il metodo
PsDocument.writeGraphicsSave(). - Per inserire lo stato grafico corrente, incluse le aree di ritaglio attive, nello stack degli stati, utilizzare il metodo
PsDocument.writeGraphicsSave(). - Per ripristinare lo stato grafico, rimuovendo lo stato grafico superiore dallo stack e riportando l’area di ritaglio allo stato precedente, utilizzare il metodo
PsDocument.writeGraphicsRestore(). - Per ritagliare le forme utilizzando qualsiasi tracciato vettoriale chiuso standard o complesso come area di ritaglio, utilizzare
Rectangle2D,Ellipse2D,Path2D.
Applicare un ritaglio con una forma semplice (rettangolo o ellisse)
Limita le operazioni di disegno del testo o della grafica vettoriale in modo che rimangano rigorosamente all’interno di una forma geometrica di base.
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.");
}
}Gestire aree di ritaglio nidificate con gli stati grafici
Isola i contorni di ritaglio locali e impedisci che il ritaglio persista tra gli elementi della pagina racchiudendo le operazioni di ritaglio nei blocchi writeGraphicsSave() e 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.");
}
}Ritagliare testo complesso e tracciati vettoriali
Utilizza forme personalizzate create con Path2D come maschere dinamiche per sfondi a motivi o multicolore.
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.");
}
}Installazione e configurazione
Aggiungi Aspose.Page for Java al tuo 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. In che modo PsDocument.clip(Shape) modifica la regione di ritaglio corrente?
La chiamata a clip(Shape) interseca la forma specificata con il percorso di ritaglio esistente nel contesto di esecuzione PostScript. Non sostituisce completamente il percorso di ritaglio a meno che lo stato non venga ripristinato prima.
2. Come posso rimuovere o reimpostare un percorso di ritaglio in PostScript?
Poiché PostScript accumula i ritagli tramite intersezione, non è possibile ‘rimuovere’ direttamente un percorso di ritaglio. È invece necessario salvare lo stato con document.writeGraphicsSave() prima di applicare il ritaglio e ripristinarlo con document.writeGraphicsRestore() al termine.
3. Posso utilizzare forme arbitrarie, come contorni di testo o percorsi curvi, per il ritaglio?
Sì. Qualsiasi implementazione Java di java.awt.Shape, inclusi Path2D, forme curve di Bézier e contorni vettoriali di testo convertito, può essere passata direttamente a document.clip().