Gradient Grid Transparency XPS را اضافه کنید

از فایل های XPS می توان برای نمایش اطلاعات بصری زیادی استفاده کرد. آنها از متن، تصاویر، شفافیت اشیا، شبکه‌ها، گرادیان‌ها و بسیاری ویژگی‌های دیگر پشتیبانی می‌کنند. می‌توانید شیب، شبکه و اشیاء شفاف را طبق نیاز خود در فایل‌های XPS وارد کنید. در این مقاله به بررسی جزئیات این ویژگی ها به همراه مثال ها و موارد استفاده مختلف خواهیم پرداخت. بگذارید موضوعات زیر را مرور کنیم:

نصب XPS API برای C++

شما می توانید به سرعت و به راحتی Aspose.Page برای C++ API را در برنامه های برنامه نویسی خود برای دستکاری XPS، PS، EPS و سایر فرمت های فایل پشتیبانی شده پیکربندی کنید. به سادگی فایل DLL را از Downloads رسمی دانلود کنید، یا با دستور زیر آن را از گالری NuGet نصب کنید:

PM> Install-Package Aspose.Page.Cpp 

افزودن گرادیان به فایل XPS با استفاده از C++

گاهی اوقات شما نیاز به اضافه کردن گرادینت در فایل های XPS دارید. می توانید فایل XPS را دستکاری کنید زیرا API به شما امکان می دهد گرادیان خطی، افقی و همچنین عمودی را اضافه کنید. اجازه دهید شیب های زیر را در یک فایل XPS اضافه کنیم:

افزودن گرادیان عمودی به فایل XPS با C++

با چند تماس ساده API می توانید به راحتی گرادیان عمودی را در فایل های XPS اضافه کنید. در زیر مراحل اضافه کردن گرادیان عمودی آمده است:

  1. ایجاد یک سند XPS جدید
  2. راه اندازی لیست XpsGradientStop
  3. با تعریف هندسه یک مسیر جدید ایجاد کنید
  4. سند XPS حاصل را ذخیره کنید

کد زیر بر اساس این مراحل است که نشان می دهد چگونه می توان یک گرادیان عمودی در یک فایل XPS با استفاده از C++ اضافه کرد:

// سند XPS جدید ایجاد کنید
auto doc = System::MakeObject<XpsDocument>();

// فهرست 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));

// با تعریف هندسه به صورت اختصاری مسیر جدیدی ایجاد کنید
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);

// سند XPS حاصل را ذخیره کنید
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");

با استفاده از C++، گرادیان افقی را در XPS اضافه کنید

یکی دیگر از تغییرات احتمالی گرادیان در فایل‌های XPS، گرادیان افقی است. رویکرد افزودن گرادیان افقی کمی به موردی که در بالا بحث کردیم مربوط می شود. مراحل زیر برای افزودن گرادیان افقی باید دنبال کنید:

  1. سند XPS جدید ایجاد کنید
  2. با استفاده از XpsGradientStop توقف های گرادیان را مشخص کنید
  3. ایجاد مسیر با هندسه
  4. سند خروجی XPS را ذخیره کنید

قطعه کد زیر نحوه اضافه کردن گرادیان افقی در فایل‌های XPS با استفاده از C++ را توضیح می‌دهد:

// سند XPS جدید ایجاد کنید
auto doc = System::MakeObject<XpsDocument>();

// فهرست 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));

// با تعریف هندسه به صورت اختصاری مسیر جدیدی ایجاد کنید
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);

// سند XPS حاصل را ذخیره کنید
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");

Grid را در فایل XPS با C++ وارد کنید

Aspose.Page for C++ API به شما امکان می دهد شبکه هایی را در فایل های XPS با ویژگی های زیادی برای کنترل رندر رندر کنید. اجازه دهید مثالی از قرار دادن گرید در فایل XPS در برنامه های کاربردی مبتنی بر C++ را در نظر بگیریم. با در نظر گرفتن مراحل زیر می توانید با این ویژگی کار کنید:

  1. شی کلاس XpsDocument را راه اندازی کنید
  2. هندسه را برای شبکه مشخص کنید VisualBrush
  3. Canvas را برای VisualBrush grid سرخابی ایجاد کنید
  4. ویژوال براش را ایجاد کنید و شبکه را اضافه کنید
  5. فایل XPS خروجی را ذخیره کنید

کد زیر بر اساس این مراحل است که نحوه درج گرید در فایل های XPS با استفاده از ++C را توضیح می دهد:

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

// هندسه برای 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));

// بوم برای 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);

//Visual Brush را ایجاد کنید، با برخی از قطعات XPS (گرافیک برداری و گلیف) مشخص می شود.
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);

// بوم جدید
System::SharedPtr<XpsCanvas> canvas = doc->AddCanvas();
canvas->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 268.f, 70.f));

// شبکه را اضافه کنید
canvas->AddPath(gridPath);

// مستطیل شفاف قرمز در وسط بالا
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);

// سند XPS حاصل را ذخیره کنید
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");

درج شی شفاف در فایل XPS با استفاده از ++C

یکی دیگر از ویژگی های هیجان انگیز برای کار با فایل های XPS، پشتیبانی از شفافیت و شفافیت است. ممکن است در سناریوهای مختلف نیاز به اضافه کردن اشیاء شفاف به فایل XPS داشته باشید. با کمک مراحل زیر می توان به این امر دست یافت:

  1. ایجاد سند XPS جدید
  2. ایجاد مسیر با هندسه مستطیل بسته
  3. هندسه را برای مسیرهای مختلف اضافه کنید
  4. سند خروجی XPS را ذخیره کنید

این مراحل توسط کد زیر دنبال می‌شوند که نحوه اضافه کردن شی شفاف به فایل XPS با زبان برنامه‌نویسی C++ را نشان می‌دهد:

// سند XPS جدید ایجاد کنید
auto doc = System::MakeObject<XpsDocument>();

// فقط برای نشان دادن شفافیت
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()));

// ایجاد مسیر با هندسه مستطیل بسته
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// براش جامد آبی را روی fill path1 قرار دهید
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// آن را به صفحه فعلی اضافه کنید
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// به محض اینکه path1 داخل هیچ عنصر دیگری قرار نگرفته باشد، path1 و path2 یکسان هستند
// (به این معنی که path1 هیچ عنصر والد ندارد).
// به دلیل رنگ آن مستطیل در صفحه به طور موثر به سبز تبدیل می شود
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// حالا یک بار دیگر path2 را اضافه کنید. اکنون path2 دارای والد است. بنابراین path3 با path2 یکسان نخواهد بود.
// بنابراین یک مستطیل جدید روی صفحه نقاشی می شود ...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ... و آن را 300 واحد پایین تر می آوریم ...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... و برس جامد قرمز را برای پر کردن آن تنظیم کنید
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));

// ایجاد path4 جدید با هندسه path2 ...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... آن را 300 واحد به سمت راست تغییر دهید ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... و پر جامد آبی را تنظیم کنید
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));

// یک بار دیگر path4 را اضافه کنید.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4 و path5 دوباره مثل هم نیستند ...
// (مسیر 5 را 300 واحد پایین تر حرکت دهید)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// برای قطع ارتباط مقدار RenderTransform از path4 (به نظر بعدی در مورد ویژگی Fill مراجعه کنید)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... اما اگر opacity خاصیت Fill را تنظیم کنیم هم روی path5 و هم در path4 اثر می گذارد
// زیرا brush یک مقدار ویژگی پیچیده است که برای path5 و path4 یکسان می ماند
path5->get_Fill()->set_Opacity(0.8f);

// ایجاد path6 جدید با هندسه path2 ...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... آن را 600 واحد به سمت راست تغییر دهید ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... و پر جامد زرد را تنظیم کنید
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));

// اکنون کلون path6 را اضافه کنید ...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (مسیر 5 را 300 واحد پایین تر حرکت دهید)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... و opacity را برای path7 تنظیم کنید
path7->get_Fill()->set_Opacity(0.8f);
// اکنون به محض اینکه مقادیر ویژگی همراه با عنصر کلون می شوند، کدورت به طور مستقل تأثیر می گذارد

// بلوک کد زیر معادل کد قبلی است.
// خود path6 را اضافه کنید. path6 و path7 یکسان نیستند. اگرچه مقادیر ویژگی Fill آنها یکسان است 
//XpsPath path7 = doc.Add(path6);
//path7.RenderTransform = path7.RenderTransform.Clone();
//path7.RenderTransform.Translate(0, 300);
// برای «قطع اتصال» ویژگی Fill path7 از ویژگی Fill path6، دوباره آن را به کلون آن (یا کلون Fill path6) اختصاص دهید.
//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
//path7.Fill.Opacity = 0.8f;

// سند XPS حاصل را ذخیره کنید
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

نتیجه

به طور خلاصه، ما تعدادی از ویژگی های کار با فایل های XPS را بررسی کرده ایم. می‌توانید شیب، خطی، افقی یا عمودی و همچنین شبکه‌ها یا اشیاء شفاف را در فایل‌های XPS اضافه کنید. علاوه بر این، می‌توانید با دانلود پروژه مثال‌ها به چندین ویژگی دیگر نگاهی بیندازید. در صورت وجود هرگونه ابهام، لطفاً در [تالارهای پشتیبانی رایگان] برای ما نامه بنویسید. ما مفتخریم که شما را راهنمایی کنیم!

همچنین ببینید