أضف شفافية شبكة التدرج XPS

يمكن استخدام ملفات XPS لعرض الكثير من المعلومات المرئية. إنها تدعم النصوص والصور وشفافية الكائن والشبكات والتدرجات والعديد من الميزات الأخرى. يمكنك إدراج كائنات متدرجة وشبكة وشفافة في ملفات XPS وفقًا لمتطلباتك. في هذه المقالة ، سنستكشف هذه الميزات بالتفصيل ، جنبًا إلى جنب مع أمثلة وحالات استخدام مختلفة. دعونا نتصفح المواضيع التالية:

تثبيت XPS API لـ C++

يمكنك تكوين واجهة برمجة تطبيقات Aspose.Page for C++ بسرعة وسهولة في تطبيقات البرمجة الخاصة بك لمعالجة XPS و PS و EPS وتنسيقات الملفات المدعومة الأخرى. ما عليك سوى تنزيل ملف DLL من التنزيلات الرسمية ، أو تثبيته من معرض NuGet باستخدام الأمر أدناه:

PM> Install-Package Aspose.Page.Cpp 

إضافة Gradient في ملف XPS باستخدام C++

تحتاج أحيانًا إلى إضافة تدرج لوني في ملفات XPS. يمكنك معالجة ملف XPS حيث تتيح لك واجهة برمجة التطبيقات إضافة التدرج اللوني الخطي والأفقي والعمودي. دعنا نضيف التدرجات اللونية التالية في ملف XPS:

أضف تدرج عمودي في ملف XPS باستخدام C++

يمكنك بسهولة إضافة تدرج عمودي في ملفات XPS من خلال بضع استدعاءات بسيطة لواجهة برمجة التطبيقات. فيما يلي خطوات إضافة التدرج اللوني العمودي:

  1. إنشاء [مستند XPS] جديد 7
  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");

أضف تدرج أفقي في XPS باستخدام C++

هناك اختلاف آخر محتمل في التدرج اللوني في ملفات 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");

أدخل الشبكة في ملف XPS باستخدام C++

يتيح لك Aspose.Page for C++ API عرض الشبكات في ملفات XPS مع الكثير من الخصائص للتحكم في العرض. دعونا نفكر في مثال إدراج الشبكة في ملف XPS في التطبيقات المستندة إلى C++. يمكنك العمل مع هذه الميزة من خلال النظر في الخطوات أدناه:

  1. تهيئة كائن فئة XpsDocument
  2. حدد Geometry للشبكة VisualBrush
  3. إنشاء قماش لشبكة أرجوانية VisualBrush
  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);

//إنشاء فرشاة بصرية ، يتم تحديدها بواسطة بعض أجزاء 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] جديد 11
  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"));
// تعيين فرشاة صلبة زرقاء لملء المسار 1
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// أضفه إلى الصفحة الحالية
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// المسار 1 والمسار 2 متماثلان بمجرد عدم وضع المسار 1 داخل أي عنصر آخر
// (مما يعني أن المسار 1 لا يحتوي على عنصر أصلي).
// بسبب لون هذا المستطيل على الصفحة يتحول فعليًا إلى اللون الأخضر
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// الآن أضف path2 مرة أخرى. الآن المسار 2 له أصل. لذلك لن يكون المسار 3 هو نفسه 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()));

// إنشاء مسار جديد بهندسة المسار 2 ...
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);
// المسار 4 و path5 ليسا متماثلين مرة أخرى ...
// (نقل المسار 5300 وحدة أقل)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// لفصل قيمة RenderTransform عن المسار 4 (انظر التعليق التالي حول خاصية Fill)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... ولكن إذا قمنا بتعيين عتامة خاصية Fill ، فسيتم تفعيلها على كل من path5 و path4
// لأن الفرشاة هي قيمة خاصية معقدة تظل كما هي في path5 و path4
path5->get_Fill()->set_Opacity(0.8f);

// إنشاء مسار جديد 6 مع هندسة المسار 2 ...
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());
// (نقل المسار 5300 وحدة أقل)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... وضبط التعتيم على path7
path7->get_Fill()->set_Opacity(0.8f);
// الآن تأثيرات العتامة بشكل مستقل بمجرد استنساخ قيم الخصائص مع العنصر

// كتلة التعليمات البرمجية التالية تعادل الكتلة السابقة.
// أضف path6 نفسه. المسار 6 و path7 ليسا متماثلين. على الرغم من أن قيم خاصية Fill الخاصة بهم هي نفسها 
//XpsPath path7 = doc.Add (path6) ؛
//path7.RenderTransform = path7.RenderTransform.Clone() ،
//path7.RenderTransform.Translate (0، 300) ؛
// "لفصل" خاصية Fill الخاصة بـ path7 من خاصية Fill الخاصة بالمسار 6 ، أعد تعيينها إلى استنساخها (أو استنساخ Fill للمسار 6)
//path7.Fill = ((XpsSolidColorBrush) path7.Fill).Clone() ؛
//path7.Fill.Opacity = 0.8f ؛

// احفظ مستند XPS الناتج
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

استنتاج

باختصار ، اكتشفنا عددًا من الميزات للعمل مع ملفات XPS. يمكنك إضافة تدرج أو خطي أو أفقي أو رأسي ، بالإضافة إلى الشبكات أو الكائنات الشفافة في ملفات XPS. علاوة على ذلك ، يمكنك إلقاء نظرة على العديد من الميزات الأخرى عن طريق تنزيل أمثلة المشروع. في حالة وجود أي غموض ، لا تتردد في مراسلتنا على منتديات الدعم المجاني. سوف نتشرف بإرشادك!

أنظر أيضا