Εισαγωγή

Aspose.PDF FOSS for C++ είναι μια νέα βιβλιοθήκη ανοιχτού κώδικα για εργασία με έγγραφα PDF από κώδικα C++20. Κυκλοφορεί υπό την άδεια MIT και δεν έχει εξάρτηση χρόνου εκτέλεσης πέρα από τη στάνταρ βιβλιοθήκη C++ — οι κωδικοποιητές BMP, JPEG και TIFF, ο rasteriser σελίδων και ο αναλυτής PDF υλοποιούνται εσωτερικά, έτσι δεν υπάρχει σύνδεσμος σε εμπορική μηχανή PDF, εξωτερικό κωδικοποιητή εικόνας ή βιβλιοθήκη κρυπτογραφίας τρίτου.

Η βιβλιοθήκη οργανώνεται γύρω από την κλάση Aspose::Pdf::Document, η οποία φορτώνει ένα PDF από διαδρομή αρχείου και εκθέτει το περιεχόμενό του μέσω του Document.Pages(), μιας PageCollection από μεμονωμένα αντικείμενα Page. Από εκεί, το API καλύπτει την εξαγωγή κειμένου, τη ραστεροποίηση σελίδων, την κρυπτογράφηση εγγράφου, τις σημειώσεις και τα πεδία AcroForm — τις λειτουργίες που απαιτούνται για την ανάγνωση, επιθεώρηση και τροποποίηση υπαρχόντων αρχείων PDF ή τη δημιουργία νέων από την αρχή.

Αυτή η έκδοση απευθύνεται σε προγραμματιστές που χρειάζονται επεξεργασία PDF μέσα σε μια βάση κώδικα C++ χωρίς να προσθέτουν εμπορική άδεια ή αλυσίδα εξαρτήσεων τρίτων: pipelines εγγράφων, υπηρεσίες εξαγωγής περιεχομένου, εργαλεία PDF-to-image και εφαρμογές που χρειάζονται κρυπτογράφηση ή ανάγνωση δεδομένων φόρμας ως μέρος μιας μεγαλύτερης κατασκευής.


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

Φόρτωση εγγράφου και πρόσβαση σε σελίδες

Το άνοιγμα ενός υπάρχοντος PDF είναι μια μόνο κλήση κατασκευής. Το Document αναλύει το αρχείο και εκθέτει τις σελίδες του μέσω του Pages(), το οποίο επιστρέφει μια PageCollection που υποστηρίζει απαρίθμηση με βάση το 1, Count(), και Add()/Insert()/Delete() για την αναδιάταξη της σειράς των σελίδων.

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

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

    auto page = doc.Pages()[1];
    std::cout << "First page number: " << page.Number() << "\n";
}

Εξαγωγή Κειμένου

Aspose::Pdf::Text::TextAbsorber περιπλανιέται σε ένα Document ή μια μεμονωμένη Page και συλλέγει το κείμενο που βρίσκει. Κλήστε το Visit() με είτε ένα έγγραφο είτε μια σελίδα, έπειτα διαβάστε το αποτέλεσμα με το Text(). Το HasErrors() αναφέρει εάν ο απορροφητής αντιμετώπισε περιεχόμενο που δεν μπόρεσε να επεξεργαστεί.

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

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

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

    if (absorber.HasErrors()) {
        std::cerr << "Some content could not be extracted\n";
    }
}

Απόδοση σε Raster εικόνες

Οι σελίδες αποδίδονται σε BMP, JPEG ή TIFF μέσω των κλάσεων BmpDevice, JpegDevice και TiffDevice. Κάθε συσκευή δημιουργείται με μια Resolution και εκθέτει τη μέθοδο Process(page, output) που γράφει την αποδομένη εικόνα σε μια ροή εξόδου.

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

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

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

Κρυπτογράφηση

Document.Encrypt() προστατεύει ένα έγγραφο με κωδικό χρήστη, κωδικό ιδιοκτήτη, τιμή άδειας και επιλογή CryptoAlgorithm. Η απαρίθμηση καλύπτει RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) και AES-256 (AESx256). Το Document.Decrypt() αντιστρέφει τη λειτουργία, και το IsEncrypted() αναφέρει εάν ένα έγγραφο είναι αυτή τη στιγμή κρυπτογραφημένο.

#include <aspose/pdf/document.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    doc.Encrypt("user-password", "owner-password",
                Aspose::Pdf::Permissions::PrintDocument,
                Aspose::Pdf::CryptoAlgorithm::AESx256);
    doc.Save("encrypted.pdf");
}

Σχόλια

Κάθε Page εκθέτει ένα AnnotationCollection μέσω του Annotations(). Ένα TextAnnotation δημιουργείται σε σχέση με το ιδιοκτησιακό έγγραφο, τοποθετείται με ένα Rectangle και προστίθεται στη συλλογή της σελίδας με το Add().

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>

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

    Aspose::Pdf::Annotations::TextAnnotation note(doc);
    note.Rect(Aspose::Pdf::Rectangle(100.0, 700.0, 200.0, 720.0, false));
    note.Contents("Reviewed - see section 2");

    doc.Pages()[1].Annotations().Add(note);
    doc.Save("annotated.pdf");
}

Πεδία AcroForm

Document.Form() επιστρέφει το Form του εγγράφου, το οποίο εκθέτει τα υπάρχοντα πεδία μέσω του Fields() ως std::vector<Field*>. Κάθε Field αναφέρει το όνομά του και την τρέχουσα τιμή του μέσω των PartialName() και Value(), και το Form.Flatten() ενσωματώνει την εμφάνιση κάθε πεδίου στο περιεχόμενο της σελίδας, αφαιρώντας την αλληλεπιδραστικότητα.

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

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

    std::cout << "Field count: " << form.Count() << "\n";
    for (auto* field : form.Fields()) {
        std::cout << field->PartialName() << " = " << field->Value() << "\n";
    }

    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)

Ανοίξτε ένα έγγραφο, εκτυπώστε τον αριθμό των σελίδων του, εξάγετε το κείμενό του και αποδώστε την πρώτη σελίδα σε αρχείο BMP:

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/bmp_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::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream out("page1.bmp", std::ios::binary);
    bmp.Process(doc.Pages()[1], out);
}

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

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

BMP, JPEG και TIFF είναι έξοδοι απόδοσης σελίδας που παράγονται από τις αντίστοιχες κλάσεις συσκευών. Το κείμενο εξάγεται από ένα PDF μέσω του TextAbsorber. Το SVG εισάγεται ως διανυσματικό περιεχόμενο μέσω της διαδρομής φόρτωσης SVG της βιβλιοθήκης.


Ανοιχτός Κώδικας & Άδεια Χρήσης

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


Ξεκινώντας

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