Bekerja dengan klip dan jalur kliping dalam dokumen PostScript (PS) dengan Java
Tentukan, terapkan, dan kelola jalur kliping vektor dalam dokumen PostScript (PS/EPS) menggunakan Aspose.Page for Java. Batasi operasi penggambaran, rendering teks, dan tampilan gambar di dalam batas geometris tertutup apa pun. Kelola wilayah kliping lokal dan global secara efisien menggunakan tumpukan status grafis PostScript (writeGraphicsSave/writeGraphicsRestore) untuk membuat efek visual masking yang kompleks.
Aspose.Page for Java memanfaatkan primitif java.awt.Shape Java untuk memodifikasi jalur kliping saat ini dalam status rendering PsDocument.
- Untuk menerapkan klip yang berpotongan dengan jalur kliping saat ini pada batas bentuk geometris yang diberikan, gunakan metode
PsDocument.writeGraphicsSave(). - Untuk memasukkan status grafis saat ini—termasuk batas kliping aktif—ke dalam tumpukan status, gunakan metode
PsDocument.writeGraphicsSave(). - Untuk memulihkan status grafis yang mengeluarkan status grafis teratas dari tumpukan dan mengembalikan area kliping ke keadaan sebelumnya, gunakan metode
PsDocument.writeGraphicsRestore(). - Untuk mengklip bentuk dengan menggunakan jalur vektor tertutup standar atau kompleks apa pun sebagai wilayah kliping, gunakan
Rectangle2D,Ellipse2D,Path2D.
Menerapkan klip bentuk sederhana (persegi panjang atau elips)
Batasi operasi penggambaran teks atau vektor agar tetap berada tepat di dalam bentuk geometris dasar.
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.");
}
}Mengelola wilayah kliping bertingkat dengan status grafis
Pisahkan batas kliping lokal dan cegah kliping tetap berlaku di seluruh elemen halaman dengan membungkus operasi kliping di dalam blok writeGraphicsSave() dan 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.");
}
}Mengklip teks kompleks dan jalur vektor
Gunakan bentuk khusus yang dibuat dengan Path2D sebagai mask dinamis untuk latar belakang berpola atau multicolor.
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.");
}
}Instalasi dan Pengaturan
Tambahkan Aspose.Page for Java ke Maven Anda:
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. Bagaimana PsDocument.clip(Shape) mengubah wilayah klip saat ini?
Pemanggilan clip(Shape) memotong bentuk yang ditentukan dengan jalur klip yang ada dalam konteks eksekusi PostScript. Ini tidak sepenuhnya menggantikan jalur klip kecuali status dipulihkan terlebih dahulu.
2. Bagaimana cara menghapus atau mengatur ulang jalur klip di PostScript?
Karena PostScript mengakumulasi klip melalui irisan, Anda tidak dapat ‘menghapus’ jalur klip secara langsung. Sebagai gantinya, simpan status dengan document.writeGraphicsSave() sebelum menerapkan klip, lalu pulihkan dengan document.writeGraphicsRestore() setelah selesai.
3. Bisakah saya menggunakan bentuk arbitrer seperti outline teks atau jalur melengkung untuk kliping?
Ya. Implementasi Java java.awt.Shape apa pun—termasuk Path2D, bentuk Bézier melengkung, dan outline vektor teks yang dikonversi—dapat diteruskan langsung ke document.clip().