Introduktion
Aspose.PDF FOSS för C++ innehåller en liten vektor-grafik API för att bygga fria former direkt på en PDF-sida. Detta är separat från bibliotekets raster-renderingsväg — BmpDevice, JpegDevice och TiffDevice, som konverterar befintligt sidinnehåll till bildformat — och låter i stället ett program konstruera ny geometri (cirklar, ellipser och linjer) på en sida när dokumentet genereras.
API kretsar kring en Graph, en behållare som håller en uppsättning Shape-objekt och placeras på en sida på samma sätt som annat sidinnehåll, via Page.Paragraphs(). Tre konkreta former ärvda från den abstrakta basen Shape: Circle, Ellipse och Line, där varje form beskriver sin geometri med ett litet antal numeriska egenskaper snarare än en gemensam punkt- eller rektangeltyp. Linjebredd, färg, fyllning och streckmönster sätts per form via GraphInfo, och Graph-behållaren själv har en BorderInfo för att rama in hela behållaren.
Detta är ett smalt område i biblioteket — fem klasser som täcker formgeometri och stilisering — avsett för program som behöver rita enkel geometrisk grafik (ramar, markörer, anslutande linjer, markeringscirklar) på en sida utan att bygga ett fullständigt vektorritlager eller falla tillbaka på bildkomposition.
Vad som ingår
Grafbehållaren och att lägga till former på en sida
Graph innehåller de former som ritas på en sida. Dess egna egenskaper — Left(), Top(), Width(), Height() och IsChangePosition() — placerar och dimensionerar behållaren på sidan, och Shapes() returnerar vektorn av Shape-pekare som den innehåller. Former läggs till genom att konstruera dem, sätta deras egenskaper och lägga till dem i den vektorn; Graph själv läggs till på sidan via 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");
}
Rita cirklar och ellipser
Circle och Ellipse beskriver var sin geometri med enkla numeriska egenskaper istället för en gemensam punkt- eller rektangeltyp. Circle exponerar PosX(), PosY() och Radius(); Ellipse exponerar Left(), Bottom(), Width() och Height(), vilket beskriver en omgivningsruta på samma sätt som Graph själv använder för positionering. Båda åsidosätter CheckBounds(containerWidth, containerHeight), ärvd från Shape, som rapporterar om figurens aktuella geometri får plats i en behållare av given storlek.
#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);
Rita linjer
Line lagrar sin geometri på ett annat sätt än Circle och Ellipse: PositionArray() returnerar en platt std::vector<float> med koordinater — ett x-, y-par för varje punkt som linjen passerar — istället för en uppsättning namngivna egenskaper. Ett två-punktssegment sätts med fyra värden: start-x, start-y, slut-x, slut-y. Liksom de andra formerna åsidosätter Line CheckBounds(containerWidth, containerHeight) från 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);
Styla former med GraphInfo och BorderInfo
Varje formes linje och fyllning hämtas från en GraphInfo, läses och sätts via Shape.GraphInfo() / GraphInfo(value). GraphInfo exponerar linjebredd (LineWidth()), linje- och fyllningsfärg (Color(), FillColor()), ett streckmönster (DashArray(), DashPhase()), en flagga för dubbel linje (IsDoubled()), samt skevnings-/skalnings-/rotationsegenskaper (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Graph-behållaren har också en BorderInfo, som sätts via Border(), och som innehåller en GraphInfo per kant — Left(), Right(), Top(), Bottom() — samt en RoundedBorderRadius() för att runda behållarens egen ram.
#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);
Snabbstart
Lägg till biblioteket som en CMake-undermapp och länka mot målet aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Skapa ett dokument, lägg till en sida, rita en cirkel i en Graph-behållare och spara resultatet:
#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");
}
Stödda format
| Format | Filändelse | Läs | Skriv |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
Dessa format gäller hela biblioteket — sidrasterisering (BMP, JPEG, TIFF), textutdrag (Text) och SVG-import — snarare än de specifika vektorgrafikklasserna. Graph, Shape, Circle, Ellipse och Line ritar direkt i PDF-sidans innehåll och är inte bundna till ett eget filformat.
Öppen källkod & licensiering
Aspose.PDF FOSS för C++ distribueras under MIT-licensen, med full källkod tillgänglig på github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licensen tillåter kommersiell användning, modifiering och omdistribution utan ett separat avtal.