Aspose.PDF FOSS for C++ Funktionen
Aspose.PDF FOSS für C++-Features
Aspose.PDF FOSS für C++ ist eine C++20-Bibliothek zum Erstellen, Öffnen, Ändern und Speichern von PDF-Dokumenten. Diese Seite gibt einen Überblick über die wichtigsten Funktionsbereiche und die Klassen, die als Einstiegspunkte dienen. Jeder Bereich wird in seiner eigenen Entwicklerleitfaden-Seite ausführlich behandelt.
Dokumentenverwaltung
Aspose::Pdf::Document ist das Root-Objekt für jede Operation. Es öffnet eine vorhandene Datei aus einem Pfad, stellt die Seitensammlung über Pages() bereit und speichert Änderungen mit Save(). Optimize() und OptimizeResources() verkleinern die Dateigröße, indem sie ungenutzte oder duplizierte Ressourcen entfernen.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& pages = doc.Pages();
pages.Add(); // append a blank page
pages.Delete(1); // remove the original first page
doc.Optimize();
doc.Save("output.pdf");
}Textextraktion
Aspose::Pdf::Text::TextAbsorber durchläuft ein Dokument oder eine einzelne Seite und sammelt Klartext, der mit Text() nach dem Aufruf von Visit() abgerufen wird. TextFragmentAbsorber führt denselben Durchlauf aus, gibt jedoch einzelne TextFragment-Objekte über TextFragments() zurück, wodurch Zugriff auf die Position und den Textstatus jedes Fragments ermöglicht wird.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
}Rendering zu Rasterbildern
Page-Rendering-Geräte konvertieren ein Page in ein Rasterbild. BmpDevice, PngDevice, JpegDevice und TiffDevice teilen dieselbe Process(page, output)-Signatur und werden mit einem Resolution konstruiert, das die Ausgabe-DPI festlegt.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Devices::BmpDevice device(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
device.Process(doc.Pages()[1], out);
}Verschlüsselung
Document::Encrypt() schützt ein Dokument mit einem Benutzerpasswort (zum Öffnen erforderlich) und einem Besitzerpasswort (zum Ändern von Berechtigungen erforderlich), wobei ein Algorithmus verwendet wird, der aus dem CryptoAlgorithm-Enum ausgewählt wird: RC4x40, RC4x128, AESx128 oder AESx256. IsEncrypted() gibt den aktuellen Zustand zurück und Decrypt() entfernt den Schutz von einem bereits geöffneten Dokument.
#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
Annotationen fügen einer Seite sichtbare Notizen, Formen und Markierungen hinzu. Jeder Annotationstyp leitet sich von Annotation ab und wird mit dem Ziel-Page und einer Platzierungs-Rectangle konstruiert, dann über Annotationen() (ein AnnotationCollection) zur Seite hinzugefügt.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Annotations::TextAnnotation note(
page, Aspose::Pdf::Rectangle(50.0, 700.0, 250.0, 740.0, false));
note.Contents("Reviewed and approved.");
page.Annotations().Add(note);
doc.Save("annotated.pdf");
}Forms
AcroForm-Felder werden über Aspose::Pdf::Forms::Form verwaltet, erreichbar über Document::Form(). Feldtypen wie TextBoxField werden wie Annotationen konstruiert — mit einem Page und einem Rectangle — und bei Form::Add() registriert.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_box_field.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Forms::TextBoxField field(
page, Aspose::Pdf::Rectangle(100.0, 650.0, 300.0, 670.0, false));
field.PartialName("customer_name");
field.Value("Jane Doe");
doc.Form().Add(field);
doc.Save("form_filled.pdf");
}Tipps und bewährte Verfahren
- Öffnen Sie Eingabedateien über den Pfad mit dem
Document-Konstruktor; rufen SieSave()mit einem expliziten Ausgabepfad auf, anstatt die Quelle zu überschreiben, während andere Handles noch geöffnet sein können. - Rufen Sie
Optimize()vorSave()auf, wenn ein Dokument stark bearbeitet wurde — es entfernt Ressourcen, die von keiner Seite mehr referenziert werden. - Erzeugen Sie Rastergeräte (
BmpDevice,PngDevice,JpegDevice,TiffDevice) einmal pro Auflösung und verwenden Sie sie über mehrere Seiten hinweg wieder, anstatt für jede Seite ein Gerät neu zu erstellen. - Setzen Sie sowohl ein Benutzerpasswort als auch ein Besitzerpasswort, wenn Sie
Encrypt()aufrufen — ein leeres Benutzerpasswort lässt jeden Betrachter die Datei öffnen, während das Besitzerpasswort Änderungen der Berechtigungen steuert. - Halten Sie Anmerkungs- und Feldobjekte (
TextAnnotation,TextBoxFieldund ähnliche) am Leben, bis nach der Rückkehr vonSave(), da das Dokument Referenzen auf den Seiteninhalt enthält, zu dem sie hinzugefügt wurden.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
Save() erzeugt eine Datei mit unverändertem Inhalt | Es wurden Änderungen an einer Kopie einer Seite oder Annotation vorgenommen, anstatt am Objekt, das von doc.Pages() erhalten wurde | Modifizieren Sie das Objekt, das direkt von Pages(), Annotations() oder Form() zurückgegeben wird |
| Das gerenderte Bild ist leer oder leer | Falscher Seitenindex an Process() übergeben | PageCollection ist 1-indexiert — Seite 1 ist doc.Pages()[1], nicht [0] |
Encrypt() erzeugt eine Datei, die immer noch ohne Passwort geöffnet werden kann | Benutzerpasswort bleibt leer | Übergeben Sie einen nicht-leeren String als userPassword-Argument |
| Extrahierter Text ist bei einem gescannten PDF leer | Die Seite enthält nur Raster-Bildinhalt, keine Textoperatoren | TextAbsorber liest Textoperatoren; bild-nur Seiten haben keine zum Extrahieren |
Feld, das mit Form::Add() hinzugefügt wurde, erscheint nicht auf der Seite | Der Rectangle des Feldes liegt außerhalb des MediaBox der Seite | Bestätigen Sie, dass die Rechteckkoordinaten innerhalb der Page::MediaBox()-Grenzen liegen |
FAQ
Hängt Aspose.PDF FOSS für C++ von einer kommerziellen PDF-Bibliothek ab?
Nein. Es ist eine von Grund auf neu erstellte C++20-Implementierung ohne Abhängigkeit von einem kommerziellen PDF-Stack, veröffentlicht unter der MIT-Lizenz.
Kann ich ein neues PDF von Grund auf neu erstellen, anstatt ein bestehendes zu öffnen?
Ja. Document hat einen Standardkonstruktor, der ein leeres Dokument erstellt; rufen Sie Pages().Add() auf, um Seiten hinzuzufügen, bevor Sie speichern.
In welche Rasterformate kann ich rendern?
BmpDevice, PngDevice, JpegDevice und TiffDevice rendern einzelne Seiten zu BMP, PNG, JPEG bzw. TIFF.
Welche Verschlüsselungsalgorithmen werden unterstützt?
CryptoAlgorithm bietet RC4x40, RC4x128, AESx128 und AESx256 an, die an Document::Encrypt() übergeben werden.
Wohin gehe ich als Nächstes?
Der Entwicklerleitfaden enthält spezielle Seiten für Dokumenten- und Seitenverwaltung, PDF-native Grafiken und Formen, Anmerkungen und interaktive Formulare sowie die höherstufigen Fassadenklassen, die gängige Dateioperationen kapseln.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
Document | Root-Objekt — PDF öffnen, erstellen, speichern und optimieren |
Document.Pages() | Gibt das PageCollection des Dokuments zurück |
Document.Encrypt() / Decrypt() | Ein Dokument mit einem Passwort schützen oder den Schutz entfernen |
Document.Form() | Gibt den AcroForm-Container des Dokuments zurück |
TextAbsorber | Extrahiert Klartext aus einem Dokument oder einer Seite |
TextFragmentAbsorber | Extrahiert positionierte Textfragmente |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Eine Seite in ein Rasterbildformat rendern |
Resolution | Ausgabe-DPI, das an ein Rendering-Gerät übergeben wird |
CryptoAlgorithm | Auswahl des Verschlüsselungsalgorithmus: RC4 oder AES, 40–256 Bit |
Permissions | Zugriffskontroll-Flags, die an Encrypt() übergeben werden |
Annotation / AnnotationCollection | Basistyp und Container für Seitenannotationen |
TextAnnotation | Textnotiz-Annotation |
Form | AcroForm Feldcontainer erreicht über Document.Form() |
TextBoxField | Einzeilen-/Mehrzeilen-Text-Formularfeld |