Bekerja dengan kanvas dalam XPS

Klip dan ubah kanvas file XPS menggunakan API untuk C++

 

Dalam file XPS, kanvas adalah area persegi panjang pada halaman tempat konten visual, seperti teks, gambar, dan bentuk, dapat digambar. Ini berfungsi sebagai wadah bagi elemen-elemen ini dan menyediakan kerangka kerja untuk mengatur dan melapisinya.   Kanvas dapat digunakan kembali di berbagai bagian dokumen atau bahkan di beberapa dokumen dan menyediakan cara yang fleksibel untuk menyusun dan mengatur konten dalam dokumen XPS. Karakteristik utama kanvas dalam file XPS:

  • Kanvas dapat disarangkan di dalam kanvas lain, menciptakan struktur hierarki yang memungkinkan tata letak dan pengelompokan elemen yang rumit.
  • Kanvas dapat diubah menggunakan berbagai operasi, seperti terjemahan, rotasi, dan penskalaan. Hal ini memungkinkan pemosisian dan pengubahan ukuran konten secara fleksibel.
  • Kanvas dapat dipotong ke wilayah tertentu, sehingga membatasi area konten yang terlihat. Ini berguna untuk menciptakan bentuk dan efek yang rumit.
  • Kanvas dapat berisi elemen visual yang berbeda, termasuk rangkaian teks, paragraf, dan kotak teks. Mereka juga dapat berisi gambar, bentuk geometris, dan kanvas lainnya.

Mengelola Kanvas dalam dokumen adalah salah satu fitur yang ditawarkan oleh Aspose.Page untuk C++. Ini adalah solusi untuk bekerja dengan Bahasa Deskripsi Halaman yang berbeda, khususnya XPS XPS.

Untuk mengubah kanvas file XPS ikuti panduan berikutnya:

  1. Buat file XPS menggunakan Kelas XpsDocument .
  2. Buat kanvas utama, umum untuk semua elemen halaman dengan Metode AddCanvas() .
  3. Buat offset kiri dan atas di kanvas utama menggunakan Metode CreateMatrix() .
  4. Buat geometri jalur persegi panjang dengan Metode CreatePathGeometry() .
  5. Buat isian persegi panjang melalui Kelas XpsBrush .
  6. Untuk membuat persegi panjang di kanvas 2 dan mengisinya gunakan Kelas XpsPath .
  7. Untuk menerjemahkan kanvas 3 untuk memposisikan persegi panjang baru di bawah persegi panjang sebelumnya gunakan Metode CreateMatrix() .
  8. Untuk menerjemahkan kanvas ini ke sisi kanan halaman, Metode Translate() .
  9. Untuk menskalakan kanvas 4, panggil Metode Scale() .
  10. Untuk memutar kanvas 5 di sekitar titik 45 derajat, Metode RotateAround() digunakan berguna.
  11. Simpan dokumen XPS yang diubah menggunakan Metode XPsDocument.Save() .
Transformasi kanvas
// 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");
Cuplikan kode berikutnya menunjukkan cara memotong kanvas file XPS dalam Aspose.Page untuk Solusi C++ Api.

Untuk Klip kanvas file XPS ikuti panduan berikutnya:

  1. Buat atau buka file XPS menggunakan Kelas XpsDocument.
  2. Buat kanvas utama, umum untuk semua elemen halaman dengan Metode AddCanvas() .
  3. Buat offset kiri dan atas di kanvas utama menggunakan Metode CreateMatrix() .
  4. Buat geometri jalur persegi panjang dengan Metode CreatePathGeometry() .
  5. Buat isian persegi panjang melalui Kelas XpsBrush .
  6. Untuk menambahkan kanvas lain dengan klip ke kanvas utama, panggil Metode AddCanvas() lagi.
  7. Buat geometri lingkaran untuk klip menggunakan Kelas XpsPathGeometry .
  8. Untuk membuat persegi panjang di kanvas ini dan mengisinya gunakan Kelas XpsPath .
  9. Tambahkan kanvas lain dengan Metode AddCanvas() lalu buat persegi panjang di kanvas ini dan coret dengan Kelas XpsPathGeometry.
  10. Simpan dokumen XPS yang diubah melalui Metode XPsDocument.Save().
Kliping kanvas
// 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 Apa itu Format File XPS

Format XPS mirip dengan format PDF. Keduanya adalah format bahasa deskripsi halaman (PDL). EPS didasarkan pada HTML dan bukan pada bahasa PostScript. File .eps mampu memuat markup struktur dokumen bersama dengan informasi tentang bagaimana dokumen itu akan terlihat. Ada juga petunjuk tambahan tentang cara mencetak dan merender dokumen. Fitur formatnya adalah memperbaiki deskripsi dokumen yang berarti akan terlihat sama tidak peduli siapa dan dari sistem operasional apa yang membukanya.