Introducere
Aspose.PDF FOSS pentru C++ include un mic API de grafică vectorială pentru construirea formelor libere direct pe o pagină PDF. Acesta este separat de calea de redare raster a bibliotecii — BmpDevice, JpegDevice și TiffDevice, care convertesc conținutul existent al paginii în formate de imagine — și în schimb permite unui program să construiască geometrie nouă (cercuri, elipse și linii) pe o pagină pe măsură ce documentul este generat.
Componenta API se concentrează pe un Graph, un container care deține un set de obiecte Shape și este plasat pe o pagină în același mod ca și alte conținuturi de pagină, prin Page.Paragraphs(). Trei forme concrete se derivă din clasa abstractă de bază Shape: Circle, Ellipse și Line, fiecare exprimând geometria printr-un mic set de proprietăți numerice în loc de un tip comun de punct sau dreptunghi. Grosimea conturului, culoarea, umplerea și modelul de liniuțe sunt setate pentru fiecare formă prin GraphInfo, iar containerul Graph însuși conține un BorderInfo pentru încadrarea întregului container.
Aceasta este o zonă restrânsă a bibliotecii — cinci clase care acoperă geometria și stilizarea formelor — destinată programelor care trebuie să deseneze conținut geometric simplu (borduri, marcatori, linii de legătură, cercuri de evidențiere) pe o pagină fără a construi un strat complet de desen vectorial sau a recurge la compunerea de imagini.
Ce este inclus
Containerul Graph și adăugarea formelor pe o pagină
Graph deține formele desenate pe o pagină. Proprietățile sale — Left(), Top(), Width(), Height() și IsChangePosition() — poziționează și dimensionează containerul pe pagină, iar Shapes() returnează vectorul de pointeri Shape pe care îl conține. Formele sunt adăugate prin construirea lor, setarea proprietăților și adăugarea în acel vector; Graph în sine este adăugat pe pagină prin 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");
}
Desenarea cercurilor și eliptelor
Circle și Ellipse descriu fiecare geometria prin proprietăți numerice simple în loc de un tip comun de punct sau dreptunghi. Circle expune PosX(), PosY() și Radius(); Ellipse expune Left(), Bottom(), Width() și Height(), descriind o cutie de delimitare în același stil pe care Graph îl folosește pentru poziționare. Ambele suprascriu CheckBounds(containerWidth, containerHeight), moștenită din Shape, care raportează dacă geometria curentă a formei se încadrează într-un container de dimensiunea specificată.
#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);
Desenarea liniilor
Line își stochează geometria diferit de Circle și Ellipse: PositionArray() returnează un std::vector<float> plat de coordonate — o pereche x, y pentru fiecare punct prin care trece linia — în loc de un set de proprietăți denumite. Un segment cu două puncte este definit prin patru valori: x de început, y de început, x de sfârșit, y de sfârșit. Ca și celelalte forme, Line suprascrie CheckBounds(containerWidth, containerHeight) din 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);
Stilizarea formelor cu GraphInfo și BorderInfo
Conturul și umplerea fiecărei forme provin dintr-un GraphInfo, citite și setate prin Shape.GraphInfo() / GraphInfo(value). GraphInfo expune lățimea conturului (LineWidth()), culoarea conturului și de umplere (Color(), FillColor()), un model de linii punctate (DashArray(), DashPhase()), un indicator de linie dublă (IsDoubled()), și proprietăți de înclinare/scalare/rotire (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Containerul Graph conține, de asemenea, un BorderInfo, setat prin Border(), care deține un GraphInfo pentru fiecare margine — Left(), Right(), Top(), Bottom() — plus un RoundedBorderRadius() pentru rotunjirea propriei margini a containerului.
#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);
Pornire rapidă
Adăugați biblioteca ca subdirector CMake și linkați contra ținta aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Creați un document, adăugați o pagină, desenați un cerc în interiorul unui container Graph și salvați rezultatul:
#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");
}
Formate acceptate
| Format | Extensie | Citire | Scriere |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
Aceste formate se aplică întregii biblioteci — rasterizarea paginii (BMP, JPEG, TIFF), extragerea textului (Text) și importul SVG — mai degrabă decât claselor de grafică vectorială în mod specific. Graph, Shape, Circle, Ellipse și Line desenează direct în conținutul paginii PDF și nu sunt legate de un format de fișier propriu.
Open Source și licențiere
Aspose.PDF FOSS pentru C++ este distribuit sub licența MIT, cu codul sursă complet disponibil la github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licența permite utilizarea comercială, modificarea și redistribuirea fără un acord separat.