Úvod
Aspose.PDF FOSS pro C++ obsahuje malý vektorový grafický API pro tvorbu volně tvarovaných objektů přímo na PDF stránce. Toto je oddělené od rasterové renderovací cesty knihovny — BmpDevice, JpegDevice a TiffDevice, které převádějí existující obsah stránky do obrazových formátů — a místo toho umožňuje programu vytvářet novou geometrii (kružnice, elipsy a čáry) na stránce během generování dokumentu.
Jádrem API je Graph, kontejner, který drží sadu objektů Shape a je umístěn na stránce stejným způsobem jako ostatní obsah stránky, prostřednictvím Page.Paragraphs(). Tři konkrétní tvary odvozené od abstraktní základny Shape jsou Circle, Ellipse a Line, přičemž každý vyjadřuje svou geometrii pomocí malé sady číselných vlastností místo sdíleného typu bodu nebo obdélníku. Šířka obrysu, barva, výplň a vzor čárkování jsou nastaveny pro každý tvar přes GraphInfo a samotný kontejner Graph nese BorderInfo pro ohraničení celého kontejneru.
Jedná se o úzkou oblast knihovny — pět tříd pokrývajících geometrii tvarů a stylování — určenou pro programy, které potřebují kreslit jednoduchý geometrický obsah (okraje, značky, propojující čáry, zvýrazňovací kruhy) na stránce, aniž by vytvářely plnou vrstvu vektorového kreslení nebo se vraceli k obrázkovému skládání.
Co je zahrnuto
Kontejner grafu a přidávání tvarů na stránku
Graph obsahuje tvary nakreslené na stránce. Jeho vlastní vlastnosti — Left(), Top(), Width(), Height() a IsChangePosition() — určují pozici a velikost kontejneru na stránce a Shapes() vrací vektor ukazatelů na Shape, které obsahuje. Tvary se přidávají jejich vytvořením, nastavením vlastností a připojením do tohoto vektoru; samotný Graph se přidává na stránku přes Page.Paragraphs().Add().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>
using namespace Aspose::Pdf;
int main() {
Document doc;
Page page = doc.Pages().Add();
auto graph = std::make_shared<Graph>();
graph->Left(50.0);
graph->Top(50.0);
graph->Width(400.0);
graph->Height(400.0);
auto circle = std::make_unique<Circle>();
circle->PosX(200.0);
circle->PosY(200.0);
circle->Radius(75.0);
graph->Shapes().push_back(std::move(circle));
page.Paragraphs().Add(graph);
doc.Save("graph.pdf");
}
Kreslení kruhů a elips
Circle a Ellipse každá popisuje svou geometrii pomocí jednoduchých číselných vlastností místo sdíleného typu bodu nebo obdélníku. Circle poskytuje PosX(), PosY() a Radius(); Ellipse poskytuje Left(), Bottom(), Width() a Height(), čímž popisuje ohraničující rámeček ve stejném stylu, jaký používá Graph pro umístění. Obě přepisují CheckBounds(containerWidth, containerHeight), zděděnou z Shape, která oznamuje, zda aktuální geometrie tvaru zapadá do kontejneru dané velikosti.
#include <aspose/pdf/circle.hpp>
#include <aspose/pdf/ellipse.hpp>
using namespace Aspose::Pdf;
Circle circle;
circle.PosX(150.0);
circle.PosY(150.0);
circle.Radius(50.0);
bool circleFits = circle.CheckBounds(400.0, 400.0);
Ellipse ellipse;
ellipse.Left(20.0);
ellipse.Bottom(20.0);
ellipse.Width(120.0);
ellipse.Height(60.0);
bool ellipseFits = ellipse.CheckBounds(400.0, 400.0);
Kreslení čar
Line ukládá svou geometrii odlišně od Circle a Ellipse: PositionArray() vrací plochý std::vector<float> souřadnic — dvojice x, y pro každý bod, kterým čára prochází — místo sady pojmenovaných vlastností. Dvoubodový úsek se nastavuje pomocí čtyř hodnot: počáteční x, počáteční y, koncové x, koncové y. Stejně jako ostatní tvary, Line přepisuje CheckBounds(containerWidth, containerHeight) z Shape.
#include <aspose/pdf/line.hpp>
using namespace Aspose::Pdf;
Line line;
line.PositionArray({50.0f, 50.0f, 350.0f, 350.0f});
bool lineFits = line.CheckBounds(400.0, 400.0);
Stylování tvarů s GraphInfo a BorderInfo
Každý tah a výplň tvaru pocházejí z GraphInfo, čtou se a nastavují přes Shape.GraphInfo() / GraphInfo(value). GraphInfo poskytuje šířku tahu (LineWidth()), barvu tahu a výplně (Color(), FillColor()), vzor čárkování (DashArray(), DashPhase()), příznak dvojitého tahu (IsDoubled()), a vlastnosti šikmosti/škálování/rotace (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Kontejner Graph také nese BorderInfo, nastavený přes Border(), který obsahuje jedno GraphInfo pro každou stranu — Left(), Right(), Top(), Bottom() — plus RoundedBorderRadius() pro zaoblení vlastního okraje kontejneru.
#include <aspose/pdf/graph_info.hpp>
#include <aspose/pdf/border_info.hpp>
#include <aspose/pdf/color.hpp>
using namespace Aspose::Pdf;
GraphInfo stroke;
stroke.LineWidth(2.0f);
stroke.Color(Color::FromRgb(1.0, 0.0, 0.0));
stroke.FillColor(Color::FromRgb(1.0, 0.9, 0.9));
stroke.DashArray({4, 2});
BorderInfo border{BorderSide::All, 1.5f, Color::Black()};
border.RoundedBorderRadius(6.0);
Rychlý start
Přidejte knihovnu jako podadresář CMake a propojte ji s cílem aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Vytvořte dokument, přidejte stránku, nakreslete kruh uvnitř kontejneru Graph a výsledek uložte:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>
using namespace Aspose::Pdf;
int main() {
Document doc;
Page page = doc.Pages().Add();
auto graph = std::make_shared<Graph>();
graph->Left(50.0);
graph->Top(50.0);
graph->Width(300.0);
graph->Height(300.0);
auto circle = std::make_unique<Circle>();
circle->PosX(150.0);
circle->PosY(150.0);
circle->Radius(100.0);
graph->Shapes().push_back(std::move(circle));
page.Paragraphs().Add(graph);
doc.Save("circle.pdf");
}
Podporované formáty
| Formát | Přípona | Číst | Zapsat |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
Tyto formáty se vztahují na celou knihovnu — rasterizaci stránky (BMP, JPEG, TIFF), extrakci textu (Text) a import SVG — spíše než na konkrétní třídy vektorové grafiky. Graph, Shape, Circle, Ellipse a Line kreslí přímo do obsahu PDF stránky a nejsou svázány s žádným vlastním formátem souboru.
Open Source a licencování
Aspose.PDF FOSS pro C++ je distribuováno pod licencí MIT, přičemž kompletní zdrojový kód je k dispozici na github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licence umožňuje komerční použití, úpravy a redistribuci bez samostatné smlouvy.