Přidejte přechodovou mřížku Transparency XPS

Soubory XPS lze použít k zobrazení mnoha vizuálních informací. Podporují text, obrázky, průhlednost objektů, mřížky, přechody a mnoho dalších funkcí. Do souborů XPS můžete vkládat přechody, mřížky a průhledné objekty podle svých požadavků. V tomto článku tyto funkce podrobně prozkoumáme spolu s různými příklady a případy použití. Pojďme si projít následující témata:

Instalace XPS API pro C++

Můžete rychle a snadno nakonfigurovat Aspose.Page for C++ API ve vašich programovacích aplikacích pro manipulaci s XPS, PS, EPS a dalšími podporovanými formáty souborů. Jednoduše si stáhněte soubor DLL z oficiálních Downloads nebo jej nainstalujte z galerie NuGet pomocí příkazu níže:

PM> Install-Package Aspose.Page.Cpp 

Přidání přechodu do souboru XPS pomocí C++

Někdy je potřeba do souborů XPS přidat přechod. Se souborem XPS můžete manipulovat, protože rozhraní API vám umožňuje přidat lineární, horizontální i vertikální přechod. Přidejme do souboru XPS následující přechody:

Přidejte vertikální přechod do souboru XPS pomocí C++

Do souborů XPS můžete snadno přidat vertikální přechod pomocí několika jednoduchých volání API. Níže jsou uvedeny kroky pro přidání vertikálního přechodu:

  1. Vytvořit nový dokument XPS
  2. Inicializovat seznam XpsGradientStop
  3. Vytvořte novou cestu definováním geometrie
  4. Uložte výsledný dokument XPS

Níže uvedený kód je založen na těchto krocích, které demonstrují, jak přidat vertikální přechod do souboru XPS pomocí C++:

// Vytvořte nový dokument XPS
auto doc = System::MakeObject<XpsDocument>();

// Inicializovat seznam 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));

// Vytvořte novou cestu definováním geometrie ve formě zkratky
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);

// Uložte výsledný dokument XPS
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");

Přidejte horizontální přechod v XPS pomocí C++

Další možnou variací přechodu v souborech XPS je horizontální přechod. Přístup přidání horizontálního gradientu trochu souvisí s případem použití, který jsme probrali výše. Níže jsou uvedeny kroky, které musíte provést pro přidání vodorovného přechodu:

  1. Vytvořte nový dokument XPS
  2. Určete zarážky přechodu pomocí XpsGradientStop
  3. Vytvořte cestu s geometrií
  4. Uložit výstupní dokument XPS

Následující fragment kódu vysvětluje, jak přidat horizontální přechod do souborů XPS pomocí C++:

// Vytvořte nový dokument XPS
auto doc = System::MakeObject<XpsDocument>();

// Inicializovat seznam 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));

// Vytvořte novou cestu definováním geometrie ve formě zkratky
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);

// Uložte výsledný dokument XPS
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");

Vložte mřížku do souboru XPS pomocí C++

Aspose.Page for C++ API umožňuje vykreslovat mřížky v souborech XPS se spoustou vlastností pro ovládání vykreslování. Podívejme se na příklad vložení mřížky do souboru XPS ve vašich aplikacích založených na C++. S touto funkcí můžete pracovat podle následujících kroků:

  1. Inicializujte objekt třídy XpsDocument
  2. Zadejte geometrii pro mřížku VisualBrush
  3. Vytvořte Canvas pro purpurovou mřížku VisualBrush
  4. Vytvořte vizuální štětec a přidejte mřížku
  5. Uložit výstupní soubor XPS

Níže uvedený kód je založen na těchto krocích, které vysvětlují, jak vložit mřížku do souborů XPS pomocí C++:

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

// Geometrie pro purpurovou mřížku 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));

// Plátno pro purpurovou mřížku 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);

//Vytvořte Visual Brush, je specifikován nějakým fragmentem XPS (vektorová grafika a glyfy)
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);

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

// Přidat mřížku
canvas->AddPath(gridPath);

// Červený průhledný obdélník uprostřed nahoře
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);

// Uložte výsledný dokument XPS
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");

Vložte průhledný objekt do souboru XPS pomocí C++

Další zajímavou funkcí pro práci se soubory XPS je podpora průhlednosti a neprůhlednosti. V různých scénářích může být nutné přidat průhledné objekty do souboru XPS. Toho lze dosáhnout pomocí následujících kroků:

  1. Vytvořit nový dokument XPS
  2. Vytvořte cestu s geometrií uzavřeného obdélníku
  3. Přidejte geometrii pro různé cesty
  4. Uložit výstupní dokument XPS

Po těchto krocích následuje následující kód, který ukazuje, jak přidat průhledný objekt do souboru XPS pomocí programovacího jazyka C++:

// Vytvořte nový dokument XPS
auto doc = System::MakeObject<XpsDocument>();

// Jen pro demonstraci transparentnosti
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()));

// Vytvořte cestu s geometrií uzavřeného obdélníku
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// Nastavte modrý plný štětec na vyplnění cesty 1
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Přidejte jej na aktuální stránku
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// cesta1 a cesta2 jsou stejné, jakmile cesta1 nebyla umístěna do žádného jiného prvku
// (což znamená, že cesta1 neměla žádný nadřazený prvek).
// Kvůli tomu obdélníku se barva na stránce efektivně změní na zelenou
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// Nyní přidejte cestu 2 znovu. Nyní má cesta 2 rodiče. Cesta3 tedy nebude stejná jako cesta2.
// Na stránku se tak nakreslí nový obdélník...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ...a posuneme to o 300 jednotek níže...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... a nastavte červený pevný štětec, abyste jej naplnili
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));

// Vytvořte novou cestu4 s geometrií cesty2 ...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... posuňte to o 300 jednotek doprava ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... a nastavte modrou plnou výplň
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));

// Přidejte cestu4 ještě jednou.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// cesta4 a cesta5 už zase nejsou to samé...
// (posunout cestu o 5 300 jednotek níže)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// odpojit hodnotu RenderTransform od cesty4 (viz další komentář o vlastnosti Fill)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... ale pokud nastavíme neprůhlednost vlastnosti Fill, projeví se to na cestě5 i cestě4
// protože brush je komplexní hodnota vlastnosti, která zůstává stejná pro cestu5 a cestu4
path5->get_Fill()->set_Opacity(0.8f);

// Vytvořte novou cestu6 s geometrií cesty2 ...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... posuňte to o 600 jednotek doprava ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... a nastavte žlutou plnou výplň
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));

// Nyní přidejte klon path6...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (posunout cestu o 5 300 jednotek níže)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... a nastavte neprůhlednost pro cestu7
path7->get_Fill()->set_Opacity(0.8f);
// Nyní se neprůhlednost projeví nezávisle, jakmile jsou hodnoty vlastností naklonovány spolu s prvkem

// Následující blok kódu je ekvivalentní předchozímu.
// Přidejte samotnou cestu6. cesta6 a cesta7 nejsou stejné. Přestože jejich hodnoty vlastnosti Fill jsou stejné 
//XpsPath cesta7 = doc.Add(cesta6);
//cesta7.RenderTransform = cesta7.RenderTransform.Clone();
//cesta7.RenderTransform.Translate(0, 300);
// Chcete-li "odpojit" vlastnost Fill path7 od vlastnosti Fill path6, znovu ji přiřaďte jejímu klonu (nebo klonu Fill path6)
//cesta7.Fill = ((XpsSolidColorBrush)cesta7.Fill).Clone();
//cesta7.Výplň.Neprůhlednost = 0,8f;

// Uložte výsledný dokument XPS
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

Závěr

Stručně řečeno, prozkoumali jsme řadu funkcí pro práci se soubory XPS. V souborech XPS můžete přidat přechod, lineární, horizontální nebo vertikální, stejně jako mřížky nebo průhledné objekty. Kromě toho se můžete podívat na několik dalších funkcí stažením Projektu příkladů. V případě jakýchkoli nejasností nám neváhejte napsat na Free Support Forums. Bude nám ctí vás vést!

Viz také