Introduzione

Aspose.PDF FOSS per C++ include una piccola API vettoriale per creare forme libere direttamente su una pagina PDF. Questo è separato dal percorso di rendering raster della libreria — BmpDevice, JpegDevice e TiffDevice, che convertono il contenuto esistente della pagina in formati immagine — e invece consente a un programma di costruire nuova geometria (cerchi, ellissi e linee) su una pagina mentre il documento viene generato.

Il API ruota attorno a un Graph, un contenitore che contiene un insieme di oggetti Shape e viene posizionato su una pagina nello stesso modo degli altri contenuti della pagina, tramite Page.Paragraphs(). Tre forme concrete derivano dalla classe astratta Shape: Circle, Ellipse e Line, ognuna delle quali esprime la propria geometria tramite un piccolo insieme di proprietà numeriche anziché un tipo condiviso di punto o rettangolo. Spessore del tratto, colore, riempimento e modello di tratteggio sono impostati per forma tramite GraphInfo, e il contenitore Graph stesso possiede un BorderInfo per inquadrare l’intero contenitore.

Questa è un’area ristretta della libreria — cinque classi che coprono la geometria e lo stile delle forme — destinata a programmi che devono disegnare contenuti geometrici semplici (bordi, marcatori, linee di collegamento, cerchi di evidenziazione) su una pagina senza costruire un livello completo di disegno vettoriale o ricorrere al compositing di immagini.


Cosa è incluso

Il contenitore grafico e aggiunta di forme a una pagina

Graph contiene le forme disegnate su una pagina. Le sue proprietà — Left(), Top(), Width(), Height() e IsChangePosition() — posizionano e dimensionano il contenitore sulla pagina, e Shapes() restituisce il vettore di puntatori a Shape che contiene. Le forme vengono aggiunte creando le istanze, impostando le loro proprietà e aggiungendole a quel vettore; il Graph stesso è aggiunto alla pagina tramite 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");
}

Disegnare cerchi ed ellissi

Circle ed Ellipse descrivono ciascuna la propria geometria con semplici proprietà numeriche invece di un tipo condiviso di punto o rettangolo. Circle espone PosX(), PosY() e Radius(); Ellipse espone Left(), Bottom(), Width() e Height(), descrivendo una bounding box nello stesso stile che Graph utilizza per il posizionamento. Entrambe sovrascrivono CheckBounds(containerWidth, containerHeight), ereditato da Shape, che indica se la geometria corrente della forma si adatta all’interno di un contenitore delle dimensioni specificate.

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

Disegnare linee

Line memorizza la sua geometria in modo diverso da Circle ed Ellipse: PositionArray() restituisce un std::vector<float> piatto di coordinate — una coppia x, y per ogni punto attraversato dalla linea — anziché un insieme di proprietà nominate. Un segmento a due punti viene impostato con quattro valori: x iniziale, y iniziale, x finale, y finale. Come le altre forme, Line sovrascrive CheckBounds(containerWidth, containerHeight) ereditato da 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);

Stilizzare le forme con GraphInfo e BorderInfo

Il tratto e il riempimento di ogni forma provengono da un GraphInfo, letti e impostati tramite Shape.GraphInfo() / GraphInfo(value). GraphInfo espone la larghezza del tratto (LineWidth()), il colore del tratto e del riempimento (Color(), FillColor()), un pattern di tratteggi (DashArray(), DashPhase()), un flag per linea doppia (IsDoubled()), e le proprietà di inclinazione/scala/rotazione (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Il contenitore Graph trasporta anche un BorderInfo, impostato tramite Border(), che contiene un GraphInfo per ogni bordo — Left(), Right(), Top(), Bottom() — più un RoundedBorderRadius() per arrotondare il bordo del contenitore stesso.

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

Guida rapida

Aggiungi la libreria come sottodirectory di CMake e collega contro il target aspose_pdf_foss:

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

Crea un documento, aggiungi una pagina, disegna un cerchio all’interno di un contenitore Graph e salva il risultato:

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

Formati supportati

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

Questi formati si applicano all’intera libreria — rasterizzazione delle pagine (BMP, JPEG, TIFF), estrazione del testo (Text) e importazione SVG — piuttosto che alle classi di grafica vettoriale in modo specifico. Graph, Shape, Circle, Ellipse e Line disegnano direttamente nel contenuto della pagina PDF e non sono legati a un formato di file proprio.


Open Source e Licenze

Aspose.PDF FOSS per C++ è distribuito sotto licenza MIT, con il codice sorgente completo disponibile su github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. La licenza consente l’uso commerciale, la modifica e la redistribuzione senza un accordo separato.


Guida introduttiva

Risorse correlate