Introduction

Aspose.PDF FOSS for C++ est une bibliothèque open-source C++20 pour travailler avec des documents PDF. La surface API couvre la gestion des documents et des pages, l’extraction de texte, le rendu raster, le chiffrement, les annotations et les champs interactifs AcroForm — les opérations les plus couramment nécessaires lorsqu’une application C++ doit créer, inspecter ou transformer des fichiers PDF sans dépendre d’un moteur PDF externe ou d’un SDK commercial.

La bibliothèque ne s’appelle qu’à la bibliothèque standard C++. Les composants internes tels que les encodeurs raster BMP, JPEG et TIFF ainsi que le rasteriseur de pages sont implémentés à partir de zéro dans le projet, il n’y a donc aucune dépendance à un moteur PDF système, à un composant PDF commercial ou à un codec d’image tiers. Cela maintient l’empreinte des dépendances à zéro au-delà d’un compilateur conforme à C++20 et de la bibliothèque standard.

Aspose.PDF FOSS pour C++ est publié sous licence MIT. Cet article parcourt les principales zones de fonctionnalités exposées par la classe Document et ses types d’assistance, suivi d’un exemple de démarrage rapide et du support de formats actuellement confirmé.


Fonctionnalités clés

Gestion des documents et des pages

La classe Document est le point d’entrée pour ouvrir, inspecter et enregistrer des fichiers PDF. Les pages sont accessibles via Document.Pages(), qui renvoie un PageCollection supportant Count(), Add(), Insert(pageNumber) et Delete(pageNumber). Les métadonnées au niveau du document sont lues et mises à jour via Document.Info() (une instance DocumentInfo) ou définies directement avec 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() et Document.OptimizeResources() réduisent la taille du fichier de sortie en consolidant et en éliminant les ressources inutilisées avant l’enregistrement.

Extraction de texte

Aspose::Pdf::Text::TextAbsorber extrait le contenu texte brut d’un document complet ou d’une page unique. Visit() parcourt la cible et Text() renvoie la chaîne accumulée. TextFragmentAbsorber fonctionne à une granularité plus fine, exposant les séquences de texte individuelles via un 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";
}

Rendu vers des images raster

Les pages sont rendues aux formats raster via des classes de périphérique spécifiques à chaque format — PngDevice, JpegDevice, BmpDevice et TiffDevice — chacune implémentant Process(page, output). La résolution de sortie est contrôlée par la classe 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 suit le même modèle Process(page, output) pour la sortie JPEG. TiffDevice prend également en charge la sortie multi-pages en un seul appel via Process(document, fromPage, toPage, output), et expose RenderingOptions() pour contrôler la façon dont les champs de formulaire sont rendus dans la sortie raster.

Chiffrement et permissions d’accès

Document.Encrypt() protège un document avec un mot de passe utilisateur et propriétaire, en sélectionnant le chiffrement via l’énumération CryptoAlgorithm : RC4x40, RC4x128, AESx128 ou AESx256. Les permissions accordées sont décrites avec le type Permissions, dont les valeurs d’indicateur incluent PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument et 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");
}

Un document chiffré déjà ouvert est déchiffré sur place avec Document.Decrypt(). Document.IsEncrypted() indique si un document chargé possède actuellement un dictionnaire de chiffrement.

Annotations

Les annotations au niveau de la page — notes textuelles, formes et balisage — sont accessibles via Page.Annotations(), qui renvoie un AnnotationCollection. Les entrées individuelles exposent des propriétés communes telles que Contents(), Rect(), Color(), Border() et AnnotationType(), et peuvent être supprimées de la page ou aplaties en contenu statique.

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

Tout Annotation unique peut également être converti directement en contenu de page statique avec sa propre méthode Flatten(), indépendamment du flux de travail d’aplatissement de formulaire décrit ci-dessous.

Formulaires interactifs

Les champs AcroForm d’un document sont gérés via Document.Form(), qui renvoie une instance Form prenant en charge Count(), HasField(fieldName), Delete(fieldName) et Flatten(). Les nouveaux champs sont ajoutés avec Form.Add(field, pageNumber), où field est un sous-type concret de Field tel que TextBoxField, CheckboxField, ChoiceField ou 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");
}

Démarrage rapide

Ajoutez la bibliothèque en tant que sous-répertoire CMake et liez-la contre la cible aspose_pdf_foss :

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

Ouvrez un document, extrayez son texte et générez la première page au format 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);
}

Formats pris en charge

FormatExtensionLireÉcrire
BMPbmp—✓
JPEGjpeg—✓
TIFFtiff—✓
Texttxt—✓
SVGsvg✓—

Open Source & Licence

Aspose.PDF FOSS pour C++ est publié sous licence MIT, permettant une utilisation commerciale, la modification et la redistribution sans redevances. Le code source est disponible à github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.

L’utilisation commerciale est autorisée selon les termes de la licence MIT. Si votre projet nécessite un support de niveau entreprise, une couverture étendue des formats ou une intégration cloud, le Aspose.PDF — Enterprise Product Family constitue une offre commerciale distincte.


Premiers pas

Ressourcesassociées