XPS içindeki tuvallerle (canvases) çalışmak
C++ API’yi kullanarak XPS dosyalarındaki tuval (canvas) öğelerini kırpın (clip) ve dönüştürün (transform)
XPS dosyalarında tuval (canvas), metin, resim ve şekiller gibi görsel içeriklerin çizilebileceği sayfadaki dikdörtgen bir alandır. Bu öğeler için kapsayıcı görevi görür ve bunları düzenlemek ve katmanlara ayırmak (layering) için bir çerçeve sağlar. Tuval öğeleri, belgenin farklı bölümlerinde hatta birden fazla belgede yeniden kullanılabilir; bu da XPS belgesi içindeki içeriği yapılandırmak ve düzenlemek için esnek bir yol sunar. XPS dosyalarındaki tuval öğelerinin temel özellikleri:
- Tuval öğeleri diğer tuval öğelerinin içine yuvalanabilir (nested), bu da karmaşık düzenlere (layouts) ve öğelerin gruplandırılmasına olanak tanıyan hiyerarşik bir yapı oluşturur.
- Tuval öğeleri, öteleme (translation), döndürme (rotation) ve ölçekleme (scaling) gibi çeşitli işlemler kullanılarak dönüştürülebilir (transform). Bu, içerik konumlandırma ve yeniden boyutlandırma esnekliği sağlar.
- Tuval öğeleri belirli bölgelerle kırpılabilir (clip), bu da içeriklerinin görünür alanını sınırlar. Bu, karmaşık şekiller ve efektler oluşturmak için kullanışlıdır.
- Tuval öğeleri, metin çalıştırmaları (text runs), paragraflar ve metin kutuları (text boxes) dahil olmak üzere farklı görsel öğeler içerebilir. Ayrıca resimler, geometrik şekiller ve diğer tuval öğelerini de içerebilirler.
Belgelerdeki tuval öğelerini yönetmek, Aspose.Page for C++ tarafından sunulan özelliklerden biridir. Bu çözüm, farklı sayfa tanımlama dilleriyle, özellikle XPS ile çalışır.
XPS dosyasının tuval öğelerini dönüştürmek (transform) için aşağıdaki kılavuzu izleyin:
- XpsDocument sınıfını kullanarak bir XPS dosyası oluşturun.
- AddCanvas() yöntemini kullanarak tüm sayfa öğeleri için ortak olan ana tuvali oluşturun.
- CreateMatrix() yöntemini kullanarak ana tuvalde sola ve üste kaymalar yapın.
- CreatePathGeometry() yöntemiyle dikdörtgen yol geometrisi (rectangle path geometry) oluşturun.
- XpsBrush sınıfını kullanarak dikdörtgenler için bir dolgu (fill) oluşturun.
- Tuval 2’de bir dikdörtgen oluşturmak ve doldurmak için XpsPath sınıfını kullanın.
- Yeni bir dikdörtgeni önceki dikdörtgenin altına konumlandırmak için tuval 3’ü ötelemek (translate) üzere CreateMatrix() yöntemini kullanın.
- Bu tuvali sayfanın sağ tarafına ötelemek için Translate() yöntemini kullanın.
- Tuval 4’ü ölçeklendirmek (scale) için Scale() yöntemini çağırın.
- Tuval 5’i bir nokta etrafında 45 derece döndürmek (rotate) için RotateAround() yöntemi çok kullanışlıdır.
- XpsDocument.Save() yöntemini kullanarak değiştirilen XPS belgesini kaydedin.
Tuval dönüştürme (canvas transformation)
// The path to the documents directory.
System::String dataDir = RunExamples::GetDataDir_WorkingWithCanvas();
// Create new XPS Document
System::SharedPtr<XpsDocument> doc = System::MakeObject<XpsDocument>();
// Create main canvas, common for all page elemnts
System::SharedPtr<XpsCanvas> canvas1 = doc->AddCanvas();
// Make left and top offsets in the main canvas
canvas1->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 20.0f, 10.0f));
// Create rectangle path geometry
System::SharedPtr<XpsPathGeometry> rectGeom = doc->CreatePathGeometry(u"M 0,0 L 200,0 200,100 0,100 Z");
// Create a fill for rectangles
System::SharedPtr<XpsBrush> fill = doc->CreateSolidColorBrush(doc->CreateColor(12, 15, 159));
// Add new canvas without any transformations to the main canvas
System::SharedPtr<XpsCanvas> canvas2 = canvas1->AddCanvas();
// Create rectangle in this canvas and fill it
System::SharedPtr<XpsPath> rect = canvas2->AddPath(rectGeom);
rect->set_Fill(fill);
// Add new canvas with translate transformation to the main canvas
System::SharedPtr<XpsCanvas> canvas3 = canvas1->AddCanvas();
// Translate this canvas to position new rectangle below previous rectnagle
canvas3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 200.0f));
// Translate this canvas to right side of page
canvas3->get_RenderTransform()->Translate(500.0f, 0.0f);
// Create rectangle in this canvas and fill it
rect = canvas3->AddPath(rectGeom);
rect->set_Fill(fill);
// Add new canvas with double scale transformation to the main canvas
System::SharedPtr<XpsCanvas> canvas4 = canvas1->AddCanvas();
// Translate this canvas to position new rectangle below previous rectnagle
canvas4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 400.0f));
// Scale this canvas
canvas4->get_RenderTransform()->Scale(2.0f, 2.0f);
// Create rectangle in this canvas and fill it
rect = canvas4->AddPath(rectGeom);
rect->set_Fill(fill);
// Add new canvas with rotation around a point transformation to the main canvas
System::SharedPtr<XpsCanvas> canvas5 = canvas1->AddCanvas();
// Translate this canvas to position new rectangle below previous rectnagle
canvas5->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 800.0f));
// Rotate this canvas aroud a point on 45 degrees
canvas5->get_RenderTransform()->RotateAround(45.0f, System::Drawing::PointF(100.0f, 50.0f));
rect = canvas5->AddPath(rectGeom);
rect->set_Fill(fill);
// Save resultant XPS document
doc->Save(dataDir + u"output/" + u"output1.xps");XPS dosyasının tuval öğelerini kırpmak (clip) için aşağıdaki kılavuzu izleyin:
- XpsDocument sınıfını kullanarak bir XPS dosyası oluşturun veya açın.
- AddCanvas() yöntemini kullanarak tüm sayfa öğeleri için ortak olan ana tuvali oluşturun.
- CreateMatrix() yöntemini kullanarak ana tuvalde sola ve üste kaymalar yapın.
- CreatePathGeometry() yöntemiyle dikdörtgen yol geometrisi oluşturun.
- XpsBrush sınıfını kullanarak dikdörtgenler için bir dolgu oluşturun.
- Ana tuvale kırpmalı (clip) başka bir tuval eklemek için AddCanvas() yöntemini tekrar çağırın.
- XpsPathGeometry sınıfını kullanarak kırpma için daire geometrisi oluşturun.
- Bu tuvalde bir dikdörtgen oluşturmak ve doldurmak için XpsPath sınıfını kullanın.
- AddCanvas() yöntemiyle başka bir tuval ekleyin, ardından bu tuvalde bir dikdörtgen oluşturun ve XpsPathGeometry sınıfıyla çizgisini (stroke) çizin.
- XpsDocument.Save() yöntemini kullanarak değiştirilen XPS belgesini kaydedin.
Tuval kırpma (canvas clipping)
// The path to the documents directory.
System::String dataDir = RunExamples::GetDataDir_WorkingWithCanvas();
// Create new XPS Document
System::SharedPtr<XpsDocument> doc = System::MakeObject<XpsDocument>();
// Create main canvas, common for all page elemnts
System::SharedPtr<XpsCanvas> canvas1 = doc->AddCanvas();
// Make left and top offsets in the main canvas
canvas1->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 20.0f, 10.0f));
// Create rectangle path geometry
System::SharedPtr<XpsPathGeometry> rectGeom = doc->CreatePathGeometry(u"M 0,0 L 500,0 500,300 0,300 Z");
// Create a fill for rectangles
System::SharedPtr<XpsBrush> fill = doc->CreateSolidColorBrush(doc->CreateColor(12, 15, 159));
// Add another canvas with clip to the main canvas
System::SharedPtr<XpsCanvas> canvas2 = canvas1->AddCanvas();
// Create circle geometry for clip
System::SharedPtr<XpsPathGeometry> clipGeom = doc->CreatePathGeometry(u"M250,250 A100,100 0 1 1 250,50 100,100 0 1 1 250,250");
canvas2->set_Clip(clipGeom);
// Create rectangle in this canvas and fill it
System::SharedPtr<XpsPath> rect = canvas2->AddPath(rectGeom);
rect->set_Fill(fill);
// Add the second canvas with stroked rectangle to the main canvas
System::SharedPtr<XpsCanvas> canvas3 = canvas1->AddCanvas();
// Create rectangle in this canvas and stroke it
rect = canvas3->AddPath(rectGeom);
rect->set_Stroke(fill);
rect->set_StrokeThickness(2.0f);
// Save resultant XPS document
doc->Save(dataDir + u"output/" + u"output2.xps");
XPS XPS Dosya Biçimi nedir
XPS (XML Paper Specification), Microsoft’un PDF alternatifi olan bir formattır. XML/HTML temelli olup, farklı platformlarda aynı görünümü korur ve işletim sisteminden bağımsızdır.