Inleiding

Aspose.PDF FOSS voor C++ bevat een kleine vector-grafische API voor het bouwen van vrije vormen direct op een PDF-pagina. Dit staat los van het raster-renderpad van de bibliotheek — BmpDevice, JpegDevice en TiffDevice, die bestaande paginainhoud naar beeldformaten converteren — en laat in plaats daarvan een programma nieuwe geometrie (cirkels, ellipsen en lijnen) op een pagina construeren terwijl het document wordt gegenereerd.

De API draait om een Graph, een container die een verzameling Shape-objecten bevat en op een pagina wordt geplaatst op dezelfde manier als andere paginainhoud, via Page.Paragraphs(). Drie concrete vormen zijn afgeleid van de abstracte Shape-basis: Circle, Ellipse en Line, die elk hun geometrie uitdrukken via een kleine set numerieke eigenschappen in plaats van een gedeeld punt- of rechthoektype. Lijndikte, kleur, vulling en streepjespatroon worden per vorm ingesteld via GraphInfo, en de Graph-container zelf bevat een BorderInfo voor het omlijsten van de hele container.

Dit is een beperkt gebied van de bibliotheek — vijf klassen die vormgeometrie en styling behandelen — bedoeld voor programma’s die eenvoudige geometrische inhoud (randen, markeringen, verbindingslijnen, highlight-cirkels) op een pagina moeten tekenen zonder een volledige vector-tekenlaag te bouwen of terug te vallen op afbeelding-compositing.


Wat er inbegrepen is

De grafische container en het toevoegen van vormen aan een pagina

Graph bevat de vormen die op een pagina worden getekend. Zijn eigen eigenschappen — Left(), Top(), Width(), Height() en IsChangePosition() — bepalen de positie en grootte van de container op de pagina, en Shapes() retourneert de vector van Shape-pointers die hij bevat. Vormen worden toegevoegd door ze te construeren, hun eigenschappen in te stellen en ze toe te voegen aan die vector; de Graph zelf wordt aan de pagina toegevoegd 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");
}

Cirkels en ellipsen tekenen

Circle en Ellipse beschrijven elk hun geometrie met eenvoudige numerieke eigenschappen in plaats van een gedeeld punt- of rechthoektype. Circle biedt PosX(), PosY() en Radius(); Ellipse biedt Left(), Bottom(), Width() en Height(), waarmee een begrenzingsvak wordt beschreven in dezelfde stijl die Graph zelf gebruikt voor positionering. Beide overschrijven CheckBounds(containerWidth, containerHeight), geërfd van Shape, die aangeeft of de huidige geometrie van de vorm past binnen een container van de opgegeven afmetingen.

#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);

Lijnen tekenen

Line slaat zijn geometrie anders op dan Circle en Ellipse: PositionArray() retourneert een platte std::vector<float> met coördinaten — een x-y-paar voor elk punt waar de lijn doorheen gaat — in plaats van een set benoemde eigenschappen. Een tweepuntsegment wordt ingesteld met vier waarden: start-x, start-y, eind-x, eind-y. Net als de andere vormen overschrijft Line CheckBounds(containerWidth, containerHeight) van 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);

Vormen stylen met GraphInfo en BorderInfo

De lijn en vulling van elke vorm komen van een GraphInfo, gelezen en ingesteld via Shape.GraphInfo() / GraphInfo(value). GraphInfo biedt lijndikte (LineWidth()), lijn- en vulkleur (Color(), FillColor()), een streepjespatroon (DashArray(), DashPhase()), een dubbele-lijn-vlag (IsDoubled()), en scheef-/schaal-/rotatie-eigenschappen (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). De Graph-container bevat ook een BorderInfo, ingesteld via Border(), die één GraphInfo per rand bevat — Left(), Right(), Top(), Bottom() — plus een RoundedBorderRadius() voor het afronden van de eigen rand van de container.

#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);

Snelstart

Voeg de bibliotheek toe als een CMake-subdirectory en link tegen de aspose_pdf_foss-target:

add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)

Maak een document, voeg een pagina toe, teken een cirkel binnen een Graph-container, en sla het resultaat op:

#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");
}

Ondersteunde formaten

FormaatExtensieLezenSchrijven
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Deze formaten gelden voor de bibliotheek als geheel — paginarasterisatie (BMP, JPEG, TIFF), tekstelextractie (Text) en SVG-import — in plaats van specifiek voor de vector-grafiekklassen. Graph, Shape, Circle, Ellipse en Line tekenen direct in de PDF-paginainhoud en zijn niet gekoppeld aan een eigen bestandsformaat.


Open source & licenties

Aspose.PDF FOSS voor C++ wordt gedistribueerd onder de MIT-licentie, met de volledige broncode beschikbaar op github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. De licentie staat commercieel gebruik, modificatie en herdistributie toe zonder een aparte overeenkomst.


Aan de slag

Gerelateerde bronnen