परिचय

Aspose.PDF FOSS for C++ एक ओपन-सोर्स C++20 लाइब्रेरी है PDF दस्तावेज़ों के साथ काम करने के लिए। API सतह दस्तावेज़ और पेज प्रबंधन, टेक्स्ट एक्सट्रैक्शन, रास्टर रेंडरिंग, एन्क्रिप्शन, एनोटेशन्स, और इंटरैक्टिव AcroForm फ़ील्ड्स को कवर करती है — वह ऑपरेशन्स जो सबसे अधिक सामान्यतः आवश्यक होते हैं जब एक C++ एप्लिकेशन को PDF फ़ाइलें बनानी, निरीक्षण करनी, या रूपांतरित करनी होती हैं बिना किसी बाहरी PDF इंजन या व्यावसायिक SDK पर निर्भर हुए।

लाइब्रेरी केवल C++ स्टैंडर्ड लाइब्रेरी के साथ लिंक करती है। BMP, JPEG, और TIFF रास्टर एन्कोडर्स तथा पेज रास्टराइज़र जैसे आंतरिक घटक प्रोजेक्ट के भीतर ही शून्य से लागू किए गए हैं, इसलिए सिस्टम PDF रेंडरर, व्यावसायिक PDF घटक, या किसी थर्ड-पार्टी इमेज कोडेक पर कोई निर्भरता नहीं है। इससे निर्भरता का फुटप्रिंट शून्य रहता है, केवल एक C++20-अनुरूप कंपाइलर और स्टैंडर्ड लाइब्रेरी के अलावा।

Aspose.PDF FOSS for C++ MIT लाइसेंस के तहत जारी किया गया है। यह पोस्ट Document क्लास और उसकी सहायक टाइप्स द्वारा प्रदर्शित मुख्य फीचर क्षेत्रों को दर्शाती है, उसके बाद एक क्विक स्टार्ट उदाहरण और वर्तमान में पुष्टि किए गए फ़ॉर्मेट सपोर्ट दिया गया है।


मुख्य विशेषताएँ

दस्तावेज़ और पेज प्रबंधन

Document क्लास PDF फ़ाइलों को खोलने, निरीक्षण करने और सहेजने के लिए एंट्री पॉइंट है। पेजेज़ को Document.Pages() के माध्यम से एक्सेस किया जाता है, जो एक PageCollection लौटाता है जो Count(), Add(), Insert(pageNumber), और Delete(pageNumber) को सपोर्ट करता है। दस्तावेज़-स्तर का मेटाडाटा Document.Info() (एक DocumentInfo इंस्टेंस) के माध्यम से पढ़ा और अपडेट किया जाता है या सीधे Document.SetTitle() के साथ सेट किया जाता है।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/page_collection.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    std::cout << "Page count: " << doc.Pages().Count() << "\n";

    // Insert a blank page after page 1, then drop the last page
    doc.Pages().Insert(2);
    doc.Pages().Delete(doc.Pages().Count());

    doc.SetTitle("Generated Report");
    doc.Save("output.pdf");
}

Document.Optimize() और Document.OptimizeResources() आउटपुट फ़ाइल का आकार घटाते हैं, सहेजने से पहले अनावश्यक संसाधनों को एकत्रित और हटाकर।

पाठ निष्कर्षण

Aspose::Pdf::Text::TextAbsorber पूरे दस्तावेज़ या एकल पृष्ठ की सादा-पाठ सामग्री निकालता है। Visit() लक्ष्य पर चलता है और Text() संकलित स्ट्रिंग लौटाता है। TextFragmentAbsorber अधिक सूक्ष्म स्तर पर काम करता है, व्यक्तिगत पाठ रन को TextFragmentCollection के माध्यम से उजागर करता है।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/text_fragment_absorber.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    // Extract all text from the document
    Aspose::Pdf::Text::TextAbsorber absorber;
    absorber.Visit(doc);
    std::cout << absorber.Text() << "\n";

    // Extract text fragments from page 1
    Aspose::Pdf::Text::TextFragmentAbsorber fragmentAbsorber;
    fragmentAbsorber.Visit(doc.Pages()[1]);
    auto fragments = fragmentAbsorber.TextFragments();
    std::cout << "Fragments on page 1: " << fragments.Count() << "\n";
}

रेस्टर इमेजेज़ में रेंडरिंग

पृष्ठ रेस्टर फ़ॉर्मैट्स में per-format डिवाइस क्लासेज़ — PngDevice, JpegDevice, BmpDevice, और TiffDevice — के माध्यम से रेंडर होते हैं, प्रत्येक Process(page, output) को लागू करता है। आउटपुट रिज़ॉल्यूशन Resolution क्लास से नियंत्रित होता है।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/png_device.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto page = doc.Pages()[1];

    Aspose::Pdf::Devices::PngDevice png(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream pngOut("page1.png", std::ios::binary);
    png.Process(page, pngOut);

    Aspose::Pdf::Devices::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream bmpOut("page1.bmp", std::ios::binary);
    bmp.Process(page, bmpOut);
}

JpegDevice JPEG आउटपुट के लिए वही Process(page, output) पैटर्न अपनाता है। TiffDevice अतिरिक्त रूप से Process(document, fromPage, toPage, output) के माध्यम से एक ही कॉल में मल्टी-पेज आउटपुट का समर्थन करता है, और RenderingOptions() को उजागर करता है ताकि फ़ॉर्म फ़ील्ड्स को रेस्टर आउटपुट में कैसे रेंडर किया जाए, नियंत्रित किया जा सके।

एन्क्रिप्शन और एक्सेस अनुमतियाँ

Document.Encrypt() उपयोगकर्ता और मालिक पासवर्ड के साथ एक दस्तावेज़ की सुरक्षा करता है, सिफर को CryptoAlgorithm एन्नम के माध्यम से चुनता है: RC4x40, RC4x128, AESx128, या AESx256। प्रदान की गई अनुमतियों का वर्णन Permissions प्रकार से किया जाता है, जिसके फ़्लैग मानों में PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument, और PrintingQuality शामिल हैं।

#include <aspose/pdf/document.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    doc.Encrypt("user-password", "owner-password",
                Aspose::Pdf::Permissions(),
                Aspose::Pdf::CryptoAlgorithm::AESx256);

    doc.Save("encrypted.pdf");
}

एक पहले से खुला एन्क्रिप्टेड दस्तावेज़ Document.Decrypt() के साथ स्थान पर ही डिक्रिप्ट किया जाता है। Document.IsEncrypted() रिपोर्ट करता है कि लोड किया गया दस्तावेज़ वर्तमान में एन्क्रिप्शन डिक्शनरी रखता है या नहीं।

एनोटेशन

पृष्ठ-स्तर के एनोटेशन — टेक्स्ट नोट, आकार, और मार्कअप — Page.Annotations() के माध्यम से पहुँचे जा सकते हैं, जो एक AnnotationCollection लौटाता है। व्यक्तिगत प्रविष्टियों में Contents(), Rect(), Color(), Border(), और AnnotationType() जैसे साझा गुण उजागर होते हैं, और इन्हें पृष्ठ से हटाया जा सकता है या स्थैतिक सामग्री में फ्लैट किया जा सकता है।

#include <aspose/pdf/document.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto& annotations = doc.Pages()[1].Annotations();

    std::cout << "Annotation count: " << annotations.Count() << "\n";
    for (int i = 0; i < static_cast<int>(annotations.Count()); ++i) {
        std::cout << "Contents: " << annotations[i].Contents() << "\n";
    }

    // Remove the first annotation on the page
    if (annotations.Count() > 0) {
        annotations.Delete(annotations[0]);
    }

    doc.Save("output.pdf");
}

कोई भी एकल Annotation को उसकी अपनी Flatten() विधि के साथ सीधे स्थैतिक पृष्ठ सामग्री में परिवर्तित किया जा सकता है, नीचे वर्णित फ़ॉर्म-फ़्लैटिंग वर्कफ़्लो से स्वतंत्र।

इंटरैक्टिव फ़ॉर्म

दस्तावेज़ पर AcroForm फ़ील्ड्स को Document.Form() के माध्यम से प्रबंधित किया जाता है, जो Count(), HasField(fieldName), Delete(fieldName), और Flatten() का समर्थन करने वाला एक Form इंस्टेंस लौटाता है। नए फ़ील्ड्स को Form.Add(field, pageNumber) के साथ जोड़ा जाता है, जहाँ field एक ठोस Field उपप्रकार है, जैसे कि TextBoxField, CheckboxField, ChoiceField, या ButtonField।

#include <aspose/pdf/document.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto& form = doc.Form();

    std::cout << "Form fields: " << form.Count() << "\n";

    if (form.HasField("Signature1")) {
        form.Delete("Signature1");
    }

    // Convert every remaining field into static page content
    form.Flatten();
    doc.Save("flattened.pdf");
}

त्वरित प्रारंभ

लाइब्रेरी को CMake सबडायरेक्टरी के रूप में जोड़ें और aspose_pdf_foss लक्ष्य के विरुद्ध लिंक करें:

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

एक दस्तावेज़ खोलें, उसका टेक्स्ट निकालें, और पहली पृष्ठ को PNG में रेंडर करें:

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/png_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    std::cout << "Pages: " << doc.Pages().Count() << "\n";

    Aspose::Pdf::Text::TextAbsorber absorber;
    absorber.Visit(doc);
    std::cout << absorber.Text() << "\n";

    Aspose::Pdf::Devices::PngDevice png(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream out("page1.png", std::ios::binary);
    png.Process(doc.Pages()[1], out);
}

समर्थित फ़ॉर्मेट्स

फ़ॉर्मेटएक्सटेंशनपढ़ेंलिखें
BMPbmp—✓
JPEGjpeg—✓
TIFFtiff—✓
Texttxt—✓
SVGsvg✓—

ओपन सोर्स और लाइसेंसिंग

Aspose.PDF FOSS for C++ को MIT लाइसेंस के तहत जारी किया गया है, जो वाणिज्यिक उपयोग, संशोधन, और बिना रॉयल्टी के पुनर्वितरण की अनुमति देता है। स्रोत github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp पर उपलब्ध है।

MIT लाइसेंस की शर्तों के तहत वाणिज्यिक उपयोग की अनुमति है। यदि आपके प्रोजेक्ट को एंटरप्राइज़-ग्रेड समर्थन, विस्तारित फ़ॉर्मेट कवरेज, या क्लाउड इंटीग्रेशन की आवश्यकता है, तो Aspose.PDF — Enterprise Product Family एक अलग व्यावसायिक पेशकश है।


शुरू करना

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