Εισαγωγή

Aspose.PDF FOSS για C++ περιλαμβάνει ένα μικρό API διανυσματικών γραφικών για δημιουργία ελεύθερων σχημάτων απευθείας σε μια σελίδα PDF. Αυτό είναι ξεχωριστό από τη διαδρομή raster-rendering της βιβλιοθήκης — BmpDevice, JpegDevice και TiffDevice, που μετατρέπει υπάρχον περιεχόμενο σε μορφές εικόνας — και αντίθετα επιτρέπει σε ένα πρόγραμμα να κατασκευάσει νέα γεωμετρία (κύκλους, έλλειψες και γραμμές) στη σελίδα καθώς δημιουργείται το έγγραφο.

Το API εστιάζει σε ένα Graph, ένα κοντέινερ που κρατά ένα σύνολο αντικειμένων Shape και τοποθετείται σε μια σελίδα με τον ίδιο τρόπο όπως το υπόλοιπο περιεχόμενο της σελίδας, μέσω Page.Paragraphs(). Τρία συγκεκριμένα σχήματα κληρονομούν από την αφηρημένη βάση Shape: Circle, Ellipse και Line, το καθένα εκφράζει τη γεωμετρία του μέσω ενός μικρού συνόλου αριθμητικών ιδιοτήτων αντί για κοινό τύπο σημείου ή ορθογωνίου. Το πάχος γραμμής, το χρώμα, το γέμισμα και το μοτίβο διακεκομμένων γραμμών ορίζονται ανά σχήμα μέσω του GraphInfo, και το ίδιο το κοντέινερ Graph περιέχει ένα BorderInfo για το πλαίσιο ολόκληρου του κοντέινερ.

Αυτή είναι μια στενή περιοχή της βιβλιοθήκης — πέντε κλάσεις που καλύπτουν τη γεωμετρία και το στυλ των σχημάτων — προορισμένη για προγράμματα που χρειάζονται να σχεδιάζουν απλό γεωμετρικό περιεχόμενο (περιγράμματα, δείκτες, συνδετικές γραμμές, κύκλους επισήμανσης) σε μια σελίδα χωρίς να δημιουργούν πλήρη στρώση διανυσματικού σχεδίου ή να επιστρέφουν σε σύνθεση εικόνας.


Τι Περιλαμβάνεται

Το Γραφικό Δοχείο και η Προσθήκη Σχημάτων σε Σελίδα

Graph κρατά τα σχήματα που σχεδιάζονται σε μια σελίδα. Οι δικές του ιδιότητες — Left(), Top(), Width(), Height() και IsChangePosition() — καθορίζουν τη θέση και το μέγεθος του κοντέινερ στη σελίδα, και η Shapes() επιστρέφει το διάνυσμα των δεικτών Shape που περιέχει. Τα σχήματα προστίθενται δημιουργώντας τα, ορίζοντας τις ιδιότητές τους και προσθέτοντάς τα στο διάνυσμα· το ίδιο το Graph προστίθεται στη σελίδα μέσω του 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");
}

Σχεδίαση Κύκλων και Έλλειψων

Circle και Ellipse καθένα περιγράφει τη γεωμετρία του με απλές αριθμητικές ιδιότητες αντί για κοινό τύπο σημείου ή ορθογωνίου. Το Circle αποκαλύπτει τις μεθόδους PosX(), PosY() και Radius()· το Ellipse αποκαλύπτει τις Left(), Bottom(), Width() και Height(), περιγράφοντας ένα περιβάλλον κουτί με τον ίδιο τρόπο που χρησιμοποιεί το Graph για την τοποθέτηση. Και τα δύο υπερκαλύπτουν τη CheckBounds(containerWidth, containerHeight), που κληρονομείται από το Shape, η οποία αναφέρει αν η τρέχουσα γεωμετρία του σχήματος χωράει μέσα σε ένα κοντέινερ του δεδομένου μεγέθους.

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

Σχεδίαση Γραμμών

Line αποθηκεύει τη γεωμετρία του διαφορετικά από το Circle και το Ellipse: η PositionArray() επιστρέφει ένα επίπεδο std::vector<float> συντεταγμένων — ένα ζεύγος x, y για κάθε σημείο που διασχίζει η γραμμή — αντί για σύνολο ονομαστικών ιδιοτήτων. Ένα τμήμα δύο σημείων ορίζεται με τέσσερις τιμές: x εκκίνησης, y εκκίνησης, x τερματισμού, y τερματισμού. Όπως και τα άλλα σχήματα, το Line υπερκαλύπτει τη CheckBounds(containerWidth, containerHeight) από το 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);

Στυλιζάρισμα Σχημάτων με GraphInfo και BorderInfo

Κάθε γραμμή και γέμισμα σχήματος προέρχονται από ένα GraphInfo, το οποίο διαβάζεται και ορίζεται μέσω Shape.GraphInfo() / GraphInfo(value). Το GraphInfo εκθέτει το πλάτος της γραμμής (LineWidth()), το χρώμα της γραμμής και του γεμίσματος (Color(), FillColor()), ένα μοτίβο παύλων (DashArray(), DashPhase()), μια σημαία διπλής γραμμής (IsDoubled()), και ιδιότητες κλίσης/κλιμάκωσης/περιστροφής (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Ο container Graph μεταφέρει επίσης ένα BorderInfo, το οποίο ορίζεται μέσω Border(), και περιέχει ένα GraphInfo ανά πλευρά — Left(), Right(), Top(), Bottom() — συν ένα RoundedBorderRadius() για το στρογγυλεμένο περίγραμμα του ίδιου 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);

Γρήγορη Εκκίνηση

Προσθέστε τη βιβλιοθήκη ως υποκατάλογο CMake και συνδέστε την με τον προορισμό aspose_pdf_foss:

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

Δημιουργήστε ένα έγγραφο, προσθέστε μια σελίδα, σχεδιάστε έναν κύκλο μέσα σε ένα container Graph και αποθηκεύστε το αποτέλεσμα:

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

Υποστηριζόμενες Μορφές

ΜορφήΕπέκτασηΑνάγνωσηΕγγραφή
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Αυτές οι μορφές εφαρμόζονται στη βιβλιοθήκη συνολικά — η ραστεροποίηση σελίδας (BMP, JPEG, TIFF), η εξαγωγή κειμένου (Text) και η εισαγωγή SVG — αντί για τις κλάσεις διανυσματικών γραφικών συγκεκριμένα. Graph, Shape, Circle, Ellipse και Line σχεδιάζονται απευθείας στο περιεχόμενο της σελίδας PDF και δεν συνδέονται με κάποιο δικό τους μορφότυπο αρχείου.


Ανοιχτός Κώδικας & Άδειες

Aspose.PDF FOSS για C++ διανέμεται υπό την άδεια MIT, με τον πλήρη πηγαίο κώδικα διαθέσιμο στο github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Η άδεια επιτρέπει εμπορική χρήση, τροποποίηση και αναδιανομή χωρίς ξεχωριστή συμφωνία.


Ξεκινώντας

Σχετικοί Πόροι