Lägg till Gradient Grid Transparency XPS

XPS-filer kan användas för att visa mycket visuell information. De stöder text, bilder, objekttransparens, rutnät, övertoningar och många andra funktioner. Du kan infoga gradient, rutnät och transparenta objekt i XPS-filer enligt dina krav. I den här artikeln kommer vi att utforska dessa funktioner i detalj, tillsammans med olika exempel och användningsfall. Låt oss gå igenom följande ämnen:

Installerar XPS API för C++

Du kan snabbt och enkelt konfigurera Aspose.Page for C++ API i dina programmeringsapplikationer för att manipulera XPS, PS, EPS och andra filformat som stöds. Ladda bara ner DLL-filen från officiella Nedladdningar, eller installera den från NuGet-galleriet med kommandot nedan:

PM> Install-Package Aspose.Page.Cpp 

Lägga till Gradient i XPS-fil med C++

Ibland behöver du lägga till gradient i XPS-filer. Du kan manipulera XPS-filen eftersom API:et låter dig lägga till linjär, horisontell och vertikal gradient. Låt oss lägga till följande gradienter i en XPS-fil:

Lägg till Vertical Gradient i XPS-fil med C++

Du kan enkelt lägga till vertikal gradient i XPS-filer med några enkla API-anrop. Nedan följer stegen för att lägga till den vertikala gradienten:

  1. Skapa ett nytt XPS-dokument
  2. Initiera lista över XpsGradientStop
  3. Skapa en ny väg genom att definiera geometrin
  4. Spara resulterande XPS-dokument

Koden nedan är baserad på dessa steg, som visar hur man lägger till en vertikal gradient i en XPS-fil med C++:

// Skapa nytt XPS-dokument
auto doc = System::MakeObject<XpsDocument>();

// Initiera lista över 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));

// Skapa ny väg genom att definiera geometri i förkortningsform
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);

// Spara resulterande XPS-dokument
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");

Lägg till horisontell gradient i XPS med C++

En annan möjlig variant av gradient i XPS-filer är den horisontella gradienten. Tillvägagångssättet att lägga till horisontell gradient är lite relaterat till användningsfallet vi har diskuterat ovan. Följande är stegen som du måste följa för att lägga till horisontell gradient:

  1. Skapa nytt XPS-dokument
  2. Ange gradientstopp med XpsGradientStop
  3. Skapa väg med geometri
  4. Spara utdata XPS-dokument

Följande kodavsnitt beskriver hur man lägger till horisontell gradient i XPS-filer med C++:

// Skapa nytt XPS-dokument
auto doc = System::MakeObject<XpsDocument>();

// Initiera lista över 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));

// Skapa ny väg genom att definiera geometri i förkortningsform
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);

// Spara resulterande XPS-dokument
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");

Infoga Grid i XPS-fil med C++

Aspose.Page för C++ API låter dig rendera rutnät i XPS-filer med många egenskaper för att styra renderingen. Låt oss överväga exemplet med att infoga rutnät i XPS-filen i dina C++-baserade applikationer. Du kan arbeta med den här funktionen genom att överväga stegen nedan:

  1. Initiera XpsDocument-klassobjekt
  2. Ange geometri för rutnätet VisualBrush
  3. Skapa Canvas för magenta rutnät VisualBrush
  4. Skapa visuell pensel och lägg till rutnät
  5. Spara utdata XPS-fil

Koden nedan är baserad på dessa steg som förklarar hur man infogar rutnät i XPS-filer med C++:

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

// Geometri för magenta rutnät 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));

// Canvas för magenta rutnät 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);

//Skapa Visual Brush, den specificeras av något XPS-fragment (vektorgrafik och glyfer)
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);

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

// Lägg till rutnät
canvas->AddPath(gridPath);

// Röd transparent rektangel i mitten toppen
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);

// Spara resulterande XPS-dokument
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");

Infoga Transparent Object i XPS-fil med C++

En annan spännande funktion för att arbeta med XPS-filer är stödet för transparens och opacitet. Du kan behöva lägga till transparenta objekt i XPS-filen under olika scenarier. Detta kan uppnås med hjälp av följande steg:

  1. Skapa nytt XPS-dokument
  2. Skapa bana med sluten rektangelgeometri
  3. Lägg till geometri för olika banor
  4. Spara utdata XPS-dokument

Dessa steg följs av följande kod, som visar hur man lägger till transparent objekt i XPS-fil med C++ programmeringsspråk:

// Skapa nytt XPS-dokument
auto doc = System::MakeObject<XpsDocument>();

// Bara för att visa transparens
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()));

// Skapa bana med sluten rektangelgeometri
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// Ställ in blå fast pensel för att fylla banan1
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Lägg till den på den aktuella sidan
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// path1 och path2 är desamma så snart path1 inte har placerats inuti något annat element
// (vilket betyder att path1 inte hade något överordnat element).
// På grund av denna rektangel blir färgen på sidan effektivt grön
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// Lägg nu till sökväg2 igen. Nu har path2 förälder. Så sökväg3 kommer inte att vara samma som sökväg2.
// Således målas en ny rektangel på sidan ...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ... och vi flyttar den 300 enheter lägre ...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... och ställ in röd fast pensel för att fylla den
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));

// Skapa ny path4 med path2s geometri ...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... flytta den 300 enheter åt höger ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... och sätt blå fast fyllning
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));

// Lägg till path4 igen.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4 och path5 är inte samma sak igen ...
// (flytta path5 300 enheter lägre)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// för att koppla bort RenderTransform-värdet från path4 (se nästa kommentar om Fill-egenskapen)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... men om vi ställer in opaciteten för Fill-egenskapen kommer det att träda i kraft på både path5 och path4
// eftersom borste är ett komplext egenskapsvärde som förblir detsamma för path5 och path4
path5->get_Fill()->set_Opacity(0.8f);

// Skapa ny path6 med path2s geometri ...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... flytta den 600 enheter åt höger ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... och sätt gul fast fyllning
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));

// Lägg nu till path6s klon ...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (flytta path5 300 enheter lägre)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... och ställ in opacitet för path7
path7->get_Fill()->set_Opacity(0.8f);
// Nu påverkar opaciteten oberoende så snart egenskapsvärden klonas tillsammans med elementet

// Följande kodblock motsvarar det föregående.
// Lägg till path6 själv. path6 och path7 är inte samma sak. Även om deras Fill-egenskapsvärden är desamma 
//XPsPath sökväg7 = doc.Add(sökväg6);
//path7.RenderTransform = path7.RenderTransform.Clone();
//path7.RenderTransform.Translate(0, 300);
// För att "koppla bort" path7:s Fill-egenskap från path6:s Fill-egenskap omtilldela den till dess klon (eller path6:s Fill-klon)
//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
//path7.Fill.Opacity = 0,8f;

// Spara resulterande XPS-dokument
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

Slutsats

I ett nötskal har vi utforskat ett antal funktioner för att arbeta med XPS-filer. Du kan lägga till en gradient, linjär, horisontell eller vertikal, såväl som rutnät eller transparenta objekt i XPS-filer. Dessutom kan du ta en titt på flera andra funktioner genom att ladda ner Exempelprojektet. I händelse av oklarheter, vänligen skriv till oss på Free Support Forums. Vi kommer att få äran att guida dig!

Se även