परिचय

Aspose.PDF FOSS for C++ में एक छोटा वेक्टर-ग्राफिक्स API शामिल है जो सीधे PDF पृष्ठ पर फ्री-फ़ॉर्म आकार बनाने के लिए उपयोग किया जाता है। यह लाइब्रेरी के रास्टर-रेंडरिंग पाथ — 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 खुद पोजिशनिंग के लिए उपयोग करता है। दोनों Shape से विरासत में मिले CheckBounds(containerWidth, containerHeight) को ओवरराइड करते हैं, जो यह रिपोर्ट करता है कि आकार की वर्तमान ज्यामिति दिए गए आकार के कंटेनर के भीतर फिट होती है या नहीं।

#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 जोड़ी जिससे रेखा गुजरती है — बजाय नामित गुणों के सेट के। दो-बिंदु वाले सेगमेंट को चार मानों से सेट किया जाता है: start x, start y, end x, end y। अन्य आकारों की तरह, Line Shape से CheckBounds(containerWidth, containerHeight) को ओवरराइड करता है।

#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()) को उजागर करता है। Graph कंटेनर भी एक BorderInfo रखता है, जिसे Border() के माध्यम से सेट किया जाता है, जिसमें प्रत्येक किनारे के लिए एक GraphInfo होता है — Left(), Right(), Top(), Bottom() — तथा कंटेनर की अपनी बॉर्डर को गोल करने के लिए एक RoundedBorderRadius() भी होता है।

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

एक दस्तावेज़ बनाएं, एक पृष्ठ जोड़ें, 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 for C++ MIT लाइसेंस के तहत वितरित किया गया है, पूर्ण स्रोत github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp पर उपलब्ध है। लाइसेंस व्यावसायिक उपयोग, संशोधन, और पुनर्वितरण की अनुमति देता है बिना किसी अलग समझौते के।


शुरू करना

संबंधित संसाधन