Einleitung

Aspose.PDF FOSS for C++ ist eine neue Open‑Source‑Bibliothek zum Arbeiten mit PDF‑Dokumenten aus C++20‑Code. Sie wird unter der MIT‑Lizenz veröffentlicht und hat keine Laufzeitabhängigkeit über die C++‑Standardbibliothek hinaus — die BMP-, JPEG- und TIFF‑Encoder, der Seiten‑Rasterisierer und der PDF‑Parser sind intern implementiert, sodass keine Verknüpfung zu einer kommerziellen PDF‑Engine, einem externen Bild‑Codec oder einer Drittanbieter‑Kryptografiebibliothek besteht.

Die Bibliothek ist um die Klasse Aspose::Pdf::Document herum organisiert, die ein PDF aus einem Dateipfad lädt und dessen Inhalt über Document.Pages() bereitstellt, eine PageCollection einzelner Page‑Objekte. Von dort aus deckt API die Textextraktion, Seitenrasterisierung, Dokumentenverschlüsselung, Anmerkungen und AcroForm‑Felder ab – die Vorgänge, die zum Lesen, Inspizieren und Ändern vorhandener PDF‑Dateien oder zum Erstellen neuer PDFs von Grund auf erforderlich sind.

Dieses Release richtet sich an Entwickler, die PDF‑Verarbeitung innerhalb einer C++‑Codebasis benötigen, ohne eine kommerzielle Lizenz oder eine Drittanbieter‑Abhängigkeitskette hinzuzufügen: Dokumenten‑Pipelines, Inhalte‑Extraktions‑Dienste, PDF‑zu‑Bild‑Konvertierungstools und Anwendungen, die Formulardaten verschlüsseln oder wieder auslesen müssen im Rahmen eines größeren Builds.


Im Lieferumfang enthalten

Dokumenten‑Laden und Seitenzugriff

Das Öffnen eines bestehenden PDFs erfolgt mit einem einzigen Konstruktoraufruf. Document analysiert die Datei und stellt seine Seiten über Pages() bereit, das eine PageCollection zurückgibt, die 1‑basierte Indizierung, Count() sowie Add()/Insert()/Delete() zur Umstrukturierung der Seitenreihenfolge unterstützt.

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

Textextraktion

Aspose::Pdf::Text::TextAbsorber durchläuft ein Document oder eine einzelne Page und sammelt den gefundenen Textinhalt. Rufen Sie Visit() mit einem Dokument oder einer Seite auf und lesen Sie das Ergebnis mit Text(). HasErrors() gibt an, ob der Absorber auf Inhalt gestoßen ist, den er nicht verarbeiten konnte.

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

Rendering zu Rasterbildern

Seiten werden über die Klassen BmpDevice, JpegDevice und TiffDevice in BMP, JPEG oder TIFF gerendert. Jedes Gerät wird mit einer Resolution konstruiert und stellt die Methode Process(page, output) bereit, die das gerenderte Bild in einen Ausgabestream schreibt.

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

Verschlüsselung

Document.Encrypt() schützt ein Dokument mit einem Benutzerpasswort, einem Besitzerpasswort, einem Berechtigungswert und einer Auswahl des CryptoAlgorithm. Das Enum umfasst RC4‑40 (RC4x40), RC4‑128 (RC4x128), AES-128 (AESx128) und AES-256 (AESx256). Document.Decrypt() kehrt den Vorgang um, und IsEncrypted() gibt an, ob ein Dokument derzeit verschlüsselt ist.

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

Annotationen

Jede Page stellt über Annotations() eine AnnotationCollection bereit. Eine TextAnnotation wird im Kontext des zugehörigen Dokuments erzeugt, mit einem Rectangle positioniert und über Add() zur Sammlung der Seite hinzugefügt.

#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-Felder

Document.Form() gibt das Form des Dokuments zurück, das vorhandene Felder über Fields() als std::vector<Field*> bereitstellt. Jeder Field meldet seinen Namen und aktuellen Wert über PartialName() und Value(), und Form.Flatten() integriert das Erscheinungsbild jedes Feldes in den Seiteninhalt, wodurch die Interaktivität entfernt wird.

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

Schnellstart

Fügen Sie die Bibliothek als CMake‑Unterverzeichnis hinzu und linken Sie gegen das Ziel aspose_pdf_foss:

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

Öffnen Sie ein Dokument, geben Sie die Seitenzahl aus, extrahieren Sie den Text und rendern Sie die erste Seite in eine BMP-Datei:

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

Unterstützte Formate

FormatErweiterungLesenSchreiben
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

BMP, JPEG und TIFF sind Seiten-Render‑Ausgaben, die von ihren jeweiligen Geräteklassen erzeugt werden. Text wird aus einem PDF mittels TextAbsorber extrahiert. SVG wird als Vektorinhalt über den SVG‑Ladepfad der Bibliothek importiert.


Open Source & Lizenzierung

Aspose.PDF FOSS für C++ wird unter der MIT-Lizenz verteilt, wobei der vollständige Quellcode verfügbar ist unter github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Die Lizenz erlaubt kommerzielle Nutzung, Modifikation und Weiterverteilung ohne separate Vereinbarung.


Erste Schritte

Verwandte Ressourcen