Εισαγωγή

Aspose.PDF FOSS for C++ είναι μια ανοιχτού κώδικα βιβλιοθήκη C++20 για εργασία με έγγραφα PDF. Η επιφάνεια API καλύπτει τη διαχείριση εγγράφων και σελίδων, την εξαγωγή κειμένου, την raster απόδοση, την κρυπτογράφηση, τις σημειώσεις και τα διαδραστικά πεδία AcroForm — τις λειτουργίες που απαιτούνται πιο συχνά όταν μια εφαρμογή C++ πρέπει να δημιουργήσει, να εξετάσει ή να μετατρέψει αρχεία PDF χωρίς να εξαρτάται από εξωτερική μηχανή PDF ή εμπορικό SDK.

Η βιβλιοθήκη συνδέεται μόνο με τη στάνταρ βιβλιοθήκη C++. Εσωτερικά στοιχεία όπως οι κωδικοποιητές raster BMP, JPEG και TIFF και ο rasterizer σελίδων υλοποιούνται από το μηδέν μέσα στο έργο, ώστε να μην υπάρχει εξάρτηση από σύστημα renderer 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 instance) ή ορίζονται απευθείας με 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";
}

Απόδοση σε Ράστερ Εικόνες

Οι σελίδες αποδίδονται σε μορφές ράστερ μέσω κλάσεων συσκευής ανά μορφή — 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 ακολουθεί το ίδιο πρότυπο Process(page, output) για έξοδο JPEG. TiffDevice υποστηρίζει επιπλέον έξοδο πολλαπλών σελίδων σε μία κλήση μέσω Process(document, fromPage, toPage, output), και εκθέτει το RenderingOptions() για τον έλεγχο του τρόπου με τον οποίο τα πεδία φόρμας αποδίδονται στην ράστερ έξοδο.

Κρυπτογράφηση και Δικαιώματα Πρόσβασης

Document.Encrypt() προστατεύει ένα έγγραφο με κωδικό χρήστη και κωδικό ιδιοκτήτη, επιλέγοντας τον αλγόριθμο κρυπτογράφησης μέσω του enum 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(), ο οποίος επιστρέφει μια παρουσία Form που υποστηρίζει Count(), HasField(fieldName), Delete(fieldName) και Flatten(). Νέα πεδία προσαρμόζονται με το 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 για C++ κυκλοφορεί υπό την άδεια MIT, επιτρέποντας εμπορική χρήση, τροποποίηση και αναδιανομή χωρίς δικαιώματα. Ο κώδικας είναι διαθέσιμος στο github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.

Η εμπορική χρήση επιτρέπεται σύμφωνα με τους όρους της άδειας MIT. Εάν το έργο σας απαιτεί υποστήριξη επιχειρηματικού επιπέδου, εκτεταμένη κάλυψη μορφών ή ενσωμάτωση cloud, το Aspose.PDF — Enterprise Product Family είναι μια ξεχωριστή εμπορική προσφορά.


Ξεκινώντας

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