Java ile PostScript (PS) belgelerinde kırpmalar ve kırpma yollarıyla çalışma
Aspose.Page for Java kullanarak PostScript (PS/EPS) belgelerinde vektör kırpma yollarını tanımlayın, uygulayın ve yönetin. Çizim, metin oluşturma ve görüntüleme işlemlerini isteğe bağlı kapalı geometrik sınırlar içinde kısıtlayın. Karmaşık maskeli görsel efektler oluşturmak için PostScript grafik durumu yığınlarını (writeGraphicsSave/writeGraphicsRestore) kullanarak yerel ve genel kırpma bölgelerini verimli bir şekilde yönetin.
Aspose.Page for Java, PsDocument işleme durumu içindeki geçerli kırpma yolunu değiştirmek için Java’nın java.awt.Shape ilkel öğelerinden yararlanır.
- Geçerli kırpma yolunu sağlanan geometrik şeklin sınırıyla kesiştiren kırpmaları uygulamak için
PsDocument.writeGraphicsSave()yöntemini kullanın. - Etkin kırpma sınırları da dahil olmak üzere geçerli grafik durumunu durum yığınına eklemek için
PsDocument.writeGraphicsSave()yöntemini kullanın. - En üstteki grafik durumunu yığından çıkararak grafik durumunu geri yüklemek ve kırpma alanını önceki durumuna sıfırlamak için
PsDocument.writeGraphicsRestore()yöntemini kullanın. - Şekilleri, standart veya karmaşık herhangi bir kapalı vektör yolunu kırpma bölgesi olarak kullanarak kırpmak için
Rectangle2D,Ellipse2D,Path2Dkullanın.
Basit bir şekil kırpması uygulama (dikdörtgen veya elips)
Metin veya vektör çizim işlemlerini temel bir geometrik şeklin kesinlikle içinde kalacak şekilde sınırlandırın.
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.");
}
}Grafik durumlarıyla iç içe geçmiş kırpma bölgelerini yönetme
Kırpma işlemlerini writeGraphicsSave() ve writeGraphicsRestore() blokları içine alarak yerel kırpma sınırlarını yalıtın ve kırpmanın sayfa öğeleri arasında devam etmesini önleyin.
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.");
}
}Karmaşık metinleri ve vektör yollarını kırpma
Path2D ile oluşturulan özel şekilleri desenli veya çok renkli arka planlar için dinamik maskeler olarak kullanın.
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.");
}
}Kurulum ve Yapılandırma
Aspose.Page for Java’yı Maven’inize ekleyin:
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. PsDocument.clip(Shape) geçerli kırpma bölgesini nasıl değiştirir?
clip(Shape) çağrısı, belirtilen şekli PostScript yürütme bağlamındaki mevcut kırpma yolu ile kesiştirir. Önce durum geri yüklenmediği sürece kırpma yolunun tamamını değiştirmez.
2. PostScript’te bir kırpma yolunu nasıl kaldırabilir veya sıfırlayabilirim?
PostScript kırpmaları kesişim yoluyla biriktirdiğinden, bir kırpma yolunu doğrudan ‘kaldıramazsınız’. Bunun yerine, kırpmayı uygulamadan önce durumu document.writeGraphicsSave() ile kaydedin ve tamamlandığında document.writeGraphicsRestore() ile geri yükleyin.
3. Kırpma için metin ana hatları veya eğri yollar gibi rastgele şekilleri kullanabilir miyim?
Evet. Path2D, eğri Bézier şekilleri ve dönüştürülmüş metin vektör ana hatları dahil olmak üzere herhangi bir Java java.awt.Shape uygulaması doğrudan document.clip() öğesine aktarılabilir.