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().