Tambahkan Gradient Grid Transparansi XPS

File XPS dapat digunakan untuk menampilkan banyak informasi visual. Mereka mendukung teks, gambar, transparansi objek, kisi, gradien, dan banyak fitur lainnya. Anda dapat memasukkan objek gradien, kisi, dan transparan dalam file XPS sesuai kebutuhan Anda. Pada artikel ini, kami akan menjelajahi fitur-fitur ini secara mendetail, bersama dengan berbagai contoh dan kasus penggunaan. Mari kita telusuri topik-topik berikut:

Menginstal XPS API untuk C++

Anda dapat dengan cepat dan mudah mengonfigurasi Aspose.Page for C++ API dalam aplikasi pemrograman Anda untuk memanipulasi XPS, PS, EPS, dan format file lain yang didukung. Cukup unduh file DLL dari Downloads resmi, atau instal dari galeri NuGet dengan perintah di bawah ini:

PM> Install-Package Aspose.Page.Cpp 

Menambahkan Gradient di file XPS menggunakan C++

Terkadang Anda perlu menambahkan gradien di file XPS. Anda dapat memanipulasi file XPS karena API memungkinkan Anda menambahkan gradien linier, horizontal, dan vertikal. Mari kita tambahkan gradien berikut dalam file XPS:

Tambahkan Gradien Vertikal di file XPS dengan C++

Anda dapat dengan mudah menambahkan gradien vertikal dalam file XPS dengan beberapa panggilan API sederhana. Di bawah ini adalah langkah-langkah untuk menambahkan gradien vertikal:

  1. Buat [Dokumen XPS] baru7
  2. Inisialisasi Daftar XpsGradientStop
  3. Buat jalur baru dengan mendefinisikan geometri
  4. Simpan dokumen XPS yang dihasilkan

Kode di bawah ini didasarkan pada langkah-langkah ini, yang menunjukkan cara menambahkan gradien vertikal di file XPS menggunakan C++:

// Buat Dokumen XPS baru
auto doc = System::MakeObject<XpsDocument>();

// Inisialisasi Daftar XpsGradientStop
auto stops = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>>();
stops->Add(doc->CreateGradientStop(doc->CreateColor(253, 255, 12, 0), 0.f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 154, 0), 0.359375f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 56, 0), 0.424805f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(253, 255, 229, 0), 0.879883f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 255, 234), 1.f));

// Buat jalur baru dengan mendefinisikan geometri dalam bentuk singkatan
System::SharedPtr<XpsPath> path = doc->AddPath(doc->CreatePathGeometry(u"M 10,110 L 228,110 228,200 10,200"));
path->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 20.f, 70.f));
path->set_Fill(doc->CreateLinearGradientBrush(System::Drawing::PointF(10.f, 110.f), System::Drawing::PointF(10.f, 200.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);

// Simpan dokumen XPS yang dihasilkan
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");

Tambahkan Horizontal Gradient di XPS menggunakan C++

Variasi lain yang mungkin dari gradien dalam file XPS adalah gradien horizontal. Pendekatan penambahan gradien horizontal sedikit terkait dengan kasus penggunaan yang telah kita bahas di atas. Berikut ini adalah langkah-langkah yang perlu Anda ikuti untuk menambahkan gradien horizontal:

  1. Buat Dokumen XPS baru
  2. Tentukan penghentian gradien menggunakan XpsGradientStop
  3. Buat jalur dengan geometri
  4. Simpan dokumen XPS keluaran

Cuplikan kode berikut menjelaskan cara menambahkan gradien horizontal di file XPS menggunakan C++:

// Buat Dokumen XPS baru
auto doc = System::MakeObject<XpsDocument>();

// Inisialisasi Daftar XpsGradientStop
System::SharedPtr<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>> stops = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>>();
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 244, 253, 225), 0.0673828f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 251, 240, 23), 0.314453f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 252, 209, 0), 0.482422f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 241, 254, 161), 0.634766f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 53, 253, 255), 0.915039f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 12, 91, 248), 1.f));

// Buat jalur baru dengan mendefinisikan geometri dalam bentuk singkatan
System::SharedPtr<XpsPath> path = doc->AddPath(doc->CreatePathGeometry(u"M 10,210 L 228,210 228,300 10,300"));
path->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 20.f, 70.f));
path->set_Fill(doc->CreateLinearGradientBrush(System::Drawing::PointF(10.f, 0.f), System::Drawing::PointF(228.f, 0.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);

// Simpan dokumen XPS yang dihasilkan
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");

Masukkan Grid dalam file XPS dengan C++

Aspose.Page for C++ API memungkinkan Anda merender kisi di file XPS dengan banyak properti untuk mengontrol rendering. Mari kita perhatikan contoh memasukkan kisi dalam file XPS di aplikasi berbasis C++ Anda. Anda dapat bekerja dengan fitur ini dengan mempertimbangkan langkah-langkah di bawah ini:

  1. Inisialisasi objek kelas XpsDocument
  2. Tentukan Geometri untuk kisi VisualBrush
  3. Buat Canvas untuk jaringan magenta VisualBrush
  4. Buat kuas Visual dan tambahkan kisi
  5. Simpan file XPS keluaran

Kode di bawah ini didasarkan pada langkah-langkah ini yang menjelaskan cara menyisipkan kisi di file XPS menggunakan C++:

auto doc = System::MakeObject<XpsDocument>();

// Geometri untuk jaringan magenta VisualBrush
System::SharedPtr<XpsPathGeometry> pathGeometry = doc->CreatePathGeometry();
pathGeometry->AddSegment(doc->CreatePolyLineSegment(System::MakeArray<System::Drawing::PointF>({ System::Drawing::PointF(240.f, 5.f), System::Drawing::PointF(240.f, 310.f), System::Drawing::PointF(0.f, 310.f) })));
pathGeometry->idx_get(0)->set_StartPoint(System::Drawing::PointF(0.f, 5.f));

// Kanvas untuk kotak magenta VisualBrush
System::SharedPtr<XpsCanvas> visualCanvas = doc->CreateCanvas();

System::SharedPtr<XpsPath> visualPath = visualCanvas->AddPath(doc->CreatePathGeometry(u"M 0,4 L 4,4 4,0 6,0 6,4 10,4 10,6 6,6 6,10 4,10 4,6 0,6 Z"));
visualPath->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.f, .61f, 0.1f, 0.61f)));

System::SharedPtr<XpsPath> gridPath = doc->CreatePath(pathGeometry);

//Buat Kuas Visual, ditentukan oleh beberapa fragmen XPS (grafik vektor dan mesin terbang)
gridPath->set_Fill(doc->CreateVisualBrush(visualCanvas, System::Drawing::RectangleF(0.f, 0.f, 10.f, 10.f), System::Drawing::RectangleF(0.f, 0.f, 10.f, 10.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsVisualBrush>(gridPath->get_Fill()))->set_TileMode(Aspose::Page::Xps::XpsModel::XpsTileMode::Tile);

// Kanvas baru
System::SharedPtr<XpsCanvas> canvas = doc->AddCanvas();
canvas->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 268.f, 70.f));

// Tambahkan kisi
canvas->AddPath(gridPath);

// Persegi panjang transparan merah di tengah atas
System::SharedPtr<XpsPath> path = canvas->AddPath(doc->CreatePathGeometry(u"M 30,20 l 258.24,0 0,56.64 -258.24,0 Z"));
path = canvas->AddPath(doc->CreatePathGeometry(u"M 10,10 L 228,10 228,100 10,100"));
path->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.0f, 0.0f, 0.0f)));
path->set_Opacity(0.7f);

// Simpan dokumen XPS yang dihasilkan
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");

Sisipkan Objek Transparan dalam file XPS menggunakan C++

Fitur menarik lainnya untuk bekerja dengan file XPS adalah dukungan untuk transparansi dan opacity. Anda mungkin perlu menambahkan objek transparan pada file XPS dalam skenario yang berbeda. Ini dapat dicapai dengan bantuan langkah-langkah berikut:

  1. Buat [Dokumen XPS] baru11
  2. Buat jalur dengan geometri persegi panjang tertutup
  3. Tambahkan geometri untuk jalur yang berbeda
  4. Simpan dokumen XPS keluaran

Langkah-langkah ini diikuti oleh kode berikut, yang mendemonstrasikan cara menambahkan objek transparan di file XPS dengan bahasa pemrograman C++:

// Buat Dokumen XPS baru
auto doc = System::MakeObject<XpsDocument>();

// Hanya untuk menunjukkan transparansi
doc->AddPath(doc->CreatePathGeometry(u"M120,0 H400 v1000 H120"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));
doc->AddPath(doc->CreatePathGeometry(u"M300,120 h600 V420 h-600"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));

// Buat jalur dengan geometri persegi panjang tertutup
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// Setel sikat padat biru untuk mengisi jalur1
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Tambahkan ke halaman saat ini
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// path1 dan path2 sama segera setelah path1 belum ditempatkan di dalam elemen lainnya
// (yang berarti path1 tidak memiliki elemen induk).
// Karena itu warna persegi panjang pada halaman secara efektif berubah menjadi hijau
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// Sekarang tambahkan path2 sekali lagi. Sekarang path2 memiliki induk. Jadi jalur3 tidak akan sama dengan jalur2.
// Jadi persegi panjang baru dilukis di halaman ...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ... dan kami menggesernya 300 unit lebih rendah ...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... dan atur sikat padat berwarna merah untuk mengisinya
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));

// Buat path4 baru dengan geometri path2 ...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... geser 300 unit ke kanan ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... dan atur isian solid biru
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));

// Tambahkan path4 sekali lagi.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4 dan path5 tidak sama lagi ...
// (pindahkan jalur5 300 unit lebih rendah)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// untuk memutuskan nilai RenderTransform dari path4 (lihat komentar selanjutnya tentang properti Isi)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... tetapi jika kita menyetel opacity dari properti Isi, ini akan berpengaruh pada jalur5 dan jalur4
// karena brush adalah nilai properti kompleks yang tetap sama untuk path5 dan path4
path5->get_Fill()->set_Opacity(0.8f);

// Buat path6 baru dengan geometri path2 ...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... geser 600 unit ke kanan ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... dan atur isian padat berwarna kuning
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));

// Sekarang tambahkan klon path6 ...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (pindahkan jalur5 300 unit lebih rendah)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... dan atur opacity untuk path7
path7->get_Fill()->set_Opacity(0.8f);
// Sekarang efek opacity secara independen segera setelah nilai properti dikloning bersama dengan elemen

// Blok kode berikut setara dengan yang sebelumnya.
// Tambahkan path6 itu sendiri. path6 dan path7 tidak sama. Meskipun nilai properti Isi mereka sama 
//Jalur XpsPath7 = doc.Add(jalur6);
//path7.RenderTransform = path7.RenderTransform.Clone();
//path7.RenderTransform.Translate(0, 300);
// Untuk "memutuskan" properti Fill path7 dari properti Fill path6, tetapkan kembali ke klonnya (atau klon Fill path6)
//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
//path7.Fill.Opacity = 0.8f;

// Simpan dokumen XPS yang dihasilkan
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

Kesimpulan

Singkatnya, kami telah menjelajahi sejumlah fitur untuk bekerja dengan file XPS. Anda dapat menambahkan gradien, linier, horizontal, atau vertikal, serta kisi atau objek transparan di file XPS. Selain itu, Anda dapat melihat beberapa fitur lainnya dengan mengunduh proyek Contoh. Jika ada ambiguitas, jangan ragu untuk menulis kepada kami di Forum Dukungan Gratis. Kami akan merasa terhormat untuk membimbing Anda!

Lihat juga