Introduction

Aspose.PDF FOSS for C++ est une nouvelle bibliothèque open-source pour travailler avec des documents PDF à partir de code C++20. Elle est publiée sous licence MIT et ne comporte aucune dépendance d’exécution au-delà de la bibliothèque standard C++ — les encodeurs BMP, JPEG et TIFF, le rasteriseur de pages et l’analyseur PDF sont implémentés en interne, il n’y a donc aucun lien vers un moteur PDF commercial, un codec d’image externe ou une bibliothèque de cryptographie tierce.

La bibliothèque est organisée autour de la classe Aspose::Pdf::Document, qui charge un PDF à partir d’un chemin de fichier et expose son contenu via Document.Pages(), une PageCollection d’objets Page individuels. À partir de là, le API couvre l’extraction de texte, la rasterisation des pages, le chiffrement des documents, les annotations et les champs AcroForm — les opérations nécessaires pour lire, inspecter et modifier des fichiers PDF existants, ou créer de nouveaux à partir de zéro.

Cette version s’adresse aux développeurs qui ont besoin de traitement PDF au sein d’une base de code C++ sans ajouter de licence commerciale ni de chaîne de dépendances tierces : pipelines de documents, services d’extraction de contenu, outils de conversion PDF‑vers‑image, et applications qui doivent chiffrer ou relire les données de formulaire dans le cadre d’un projet plus vaste.


Ce qui est inclus

Chargement de documents et accès aux pages

Ouvrir un PDF existant se fait en un seul appel de constructeur. Document analyse le fichier et expose ses pages via Pages(), qui renvoie une PageCollection supportant l’indexation à partir de 1, Count(), et Add()/Insert()/Delete() pour restructurer l’ordre des pages.

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

Extraction de texte

Aspose::Pdf::Text::TextAbsorber parcourt un Document ou une seule Page et collecte le contenu texte qu’il trouve. Appelez Visit() avec un document ou une page, puis lisez le résultat avec Text(). HasErrors() indique si l’absorbeur a rencontré du contenu qu’il n’a pas pu traiter.

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

Rendu en images raster

Les pages sont rendues en BMP, JPEG ou TIFF via les classes BmpDevice, JpegDevice et TiffDevice. Chaque dispositif est construit avec une Resolution et expose une méthode Process(page, output) qui écrit l’image rendue dans un flux de sortie.

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

Chiffrement

Document.Encrypt() protège un document avec un mot de passe utilisateur, un mot de passe propriétaire, une valeur de permission et une sélection CryptoAlgorithm. L’énumération couvre RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) et AES-256 (AESx256). Document.Decrypt() inverse l’opération, et IsEncrypted() indique si un document est actuellement chiffré.

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

Annotations

Chaque Page expose une AnnotationCollection via Annotations(). Une TextAnnotation est construite par rapport au document propriétaire, positionnée avec un Rectangle, et ajoutée à la collection de la page avec 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");
}

Champs AcroForm

Document.Form() renvoie le Form du document, qui expose les champs existants via Fields() sous la forme d’un std::vector<Field*>. Chaque Field indique son nom et sa valeur actuelle via PartialName() et Value(), et Form.Flatten() intègre l’apparence de chaque champ dans le contenu de la page, supprimant l’interactivité.

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

Démarrage rapide

Ajoutez la bibliothèque en tant que sous‑répertoire CMake et liez‑vous à la cible aspose_pdf_foss :

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

Ouvrez un document, affichez son nombre de pages, extrayez son texte et rendez la première page dans un fichier 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);
}

Formats pris en charge

FormatExtensionLireÉcrire
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

BMP, JPEG et TIFF sont des sorties de rendu de page produites par leurs classes de périphérique respectives. Le texte est extrait d’un PDF via TextAbsorber. SVG est importé en tant que contenu vectoriel via le chemin de chargement SVG de la bibliothèque.


Open source & licences

Aspose.PDF FOSS for C++ est distribué sous licence MIT, le code source complet étant disponible sur github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. La licence autorise l’utilisation commerciale, la modification et la redistribution sans accord séparé.


Premiers pas

Ressources connexes