Introduction

Aspose.PDF FOSS pour C++ comprend un petit API vectoriel pour créer des formes libres directement sur une page PDF. Cela est distinct du chemin de rendu raster de la bibliothèque — BmpDevice, JpegDevice et TiffDevice, qui convertissent le contenu existant d’une page en formats d’image — et permet plutôt à un programme de construire une nouvelle géométrie (cercles, ellipses et lignes) sur une page lors de la génération du document.

Le API se centre sur un Graph, un conteneur qui détient un ensemble d’objets Shape et qui est placé sur une page de la même manière que le reste du contenu de la page, via Page.Paragraphs(). Trois formes concrètes dérivent de la classe abstraite Shape : Circle, Ellipse et Line, chacune exprimant sa géométrie à l’aide d’un petit ensemble de propriétés numériques plutôt que d’un type point ou rectangle partagé. L’épaisseur du trait, la couleur, le remplissage et le motif de tirets sont définis par forme via GraphInfo, et le conteneur Graph lui-même possède un BorderInfo pour encadrer l’ensemble du conteneur.

Il s’agit d’une zone étroite de la bibliothèque — cinq classes couvrant la géométrie et le style des formes — destinée aux programmes qui doivent dessiner un contenu géométrique simple (bords, marqueurs, lignes de connexion, cercles de mise en évidence) sur une page sans créer une couche de dessin vectoriel complète ou recourir à la composition d’images.


Ce qui est inclus

Le Graph Container et l’ajout de formes à une page

Graph contient les formes dessinées sur une page. Ses propres propriétés — Left(), Top(), Width(), Height() et IsChangePosition() — positionnent et dimensionnent le conteneur sur la page, et Shapes() renvoie le vecteur de pointeurs Shape qu’il détient. Les formes sont ajoutées en les construisant, en définissant leurs propriétés, puis en les ajoutant à ce vecteur ; le Graph lui–même est ajouté à la page 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");
}

Dessiner des cercles et des ellipses

Circle et Ellipse décrivent chacun leur géométrie à l’aide de simples propriétés numériques plutôt que d’un type point ou rectangle partagé. Circle expose PosX(), PosY() et Radius() ; Ellipse expose Left(), Bottom(), Width() et Height(), décrivant une boîte englobante dans le même style que Graph utilise pour le positionnement. Les deux remplacent CheckBounds(containerWidth, containerHeight), hérité de Shape, qui indique si la géométrie actuelle de la forme tient dans un conteneur de la taille donnée.

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

Dessiner des lignes

Line stocke sa géométrie différemment de Circle et Ellipse : PositionArray() renvoie un std::vector<float> plat de coordonnées — une paire x, y pour chaque point traversé par la ligne — plutôt qu’un ensemble de propriétés nommées. Un segment à deux points est défini avec quatre valeurs : x de départ, y de départ, x de fin, y de fin. Comme les autres formes, Line remplace CheckBounds(containerWidth, containerHeight) de 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);

Styliser les formes avec GraphInfo et BorderInfo

Chaque trait et remplissage de forme provient d’un GraphInfo, lu et défini via Shape.GraphInfo() / GraphInfo(value). GraphInfo expose la largeur du trait (LineWidth()), la couleur du trait et du remplissage (Color(), FillColor()), un motif de tirets (DashArray(), DashPhase()), un indicateur de ligne double (IsDoubled()), et les propriétés d’inclinaison/échelle/rotation (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Le conteneur Graph porte également un BorderInfo, défini via Border(), qui contient un GraphInfo par bord — Left(), Right(), Top(), Bottom() — ainsi qu’un RoundedBorderRadius() pour arrondir le bord du conteneur lui-même.

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

Démarrage rapide

Ajoutez la bibliothèque en tant que sous-répertoire CMake et liez-la contre la cible aspose_pdf_foss :

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

Créez un document, ajoutez une page, dessinez un cercle à l’intérieur d’un conteneur Graph, puis enregistrez le résultat :

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

Formats pris en charge

FormatExtensionLireÉcrire
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Ces formats s’appliquent à l’ensemble de la bibliothèque — rasterisation de page (BMP, JPEG, TIFF), extraction de texte (Text) et importation SVG — plutôt qu’aux classes de graphisme vectoriel spécifiquement. Graph, Shape, Circle, Ellipse et Line dessinent directement dans le contenu de la page PDF et ne sont liés à aucun format de fichier propre.


Open Source et licences

Aspose.PDF FOSS pour C++ est distribué sous licence MIT, le code source complet étant disponible sur github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. La licence autorise l’utilisation commerciale, la modification et la redistribution sans accord séparé.


Premiers pas

Ressources associées