العمل مع مناطق القص ومسارات القص في مستندات 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>

الأسئلة الشائعة

1. كيف تؤثر PsDocument.clip(Shape) على منطقة القص الحالية؟

يؤدي استدعاء clip(Shape) إلى تقاطع الشكل المحدد مع مسار القص الموجود في سياق تنفيذ PostScript. ولا يستبدل مسار القص بالكامل إلا إذا تمت استعادة الحالة أولاً.

2. كيف يمكنني إزالة مسار قص أو إعادة تعيينه في PostScript؟

نظرًا لأن PostScript يراكم عمليات القص باستخدام التقاطع، فلا يمكنك ‘إزالة’ مسار قص مباشرةً. بدلاً من ذلك، احفظ الحالة باستخدام document.writeGraphicsSave() قبل تطبيق القص، واستعدها باستخدام document.writeGraphicsRestore() عند الانتهاء.

3. هل يمكنني استخدام أشكال عشوائية مثل حدود النصوص أو المسارات المنحنية للقص؟

نعم. يمكن تمرير أي تطبيق لـ Java java.awt.Shape—بما في ذلك Path2D، وأشكال Bézier المنحنية، وحدود النصوص المتجهية المحولة—مباشرةً إلى document.clip().