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++
- Přidání přechodu do souboru XPS pomocí C++
- Vložte mřížku do souboru XPS pomocí C++
- Vložte průhledný objekt do souboru XPS pomocí C++
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:
- Vytvořit nový dokument XPS
- Inicializovat seznam XpsGradientStop
- Vytvořte novou cestu definováním geometrie
- 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:
- Vytvořte nový dokument XPS
- Určete zarážky přechodu pomocí XpsGradientStop
- Vytvořte cestu s geometrií
- 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ů:
- Inicializujte objekt třídy XpsDocument
- Zadejte geometrii pro mřížku VisualBrush
- Vytvořte Canvas pro purpurovou mřížku VisualBrush
- Vytvořte vizuální štětec a přidejte mřížku
- 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ů:
- Vytvořit nový dokument XPS
- Vytvořte cestu s geometrií uzavřeného obdélníku
- Přidejte geometrii pro různé cesty
- 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!