Aspose.PDF FOSS for C++ Functies
Aspose.PDF FOSS voor C++-functies
Aspose.PDF FOSS voor C++ is een C++20-bibliotheek voor het maken, openen, wijzigen en opslaan van PDF-documenten. Deze pagina geeft een overzicht van de belangrijkste capability-gebieden en de klassen die als toegangspunten dienen. Elk gebied wordt uitvoerig behandeld op een eigen ontwikkelaarsgids-pagina.
Documentbeheer
Aspose::Pdf::Document is het root-object voor elke bewerking. Het opent een bestaand bestand vanaf een pad, exposeert de paginacollectie via Pages(), en slaat wijzigingen op met Save(). Optimize() en OptimizeResources() verkleinen de bestandsgrootte door ongebruikte of dubbele resources te verwijderen.
#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");
}Tekstextractie
Aspose::Pdf::Text::TextAbsorber doorloopt een document of een enkele pagina en verzamelt platte tekst, die wordt opgehaald met Text() na het aanroepen van Visit(). TextFragmentAbsorber voert dezelfde doorloop uit maar retourneert individuele TextFragment-objecten via TextFragments(), waardoor toegang wordt verkregen tot de positie en de tekststatus van elk fragment.
#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";
}Renderen naar rasterafbeeldingen
Pagina-renderende apparaten zetten een Page om in een rasterafbeelding. BmpDevice, PngDevice, JpegDevice en TiffDevice delen dezelfde Process(page, output) handtekening en worden gebouwd met een Resolution die de uitvoer-DPI instelt.
#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);
}Versleuteling
Document::Encrypt() beschermt een document met een gebruikerswachtwoord (nodig om het te openen) en een eigenaarswachtwoord (nodig om rechten te wijzigen), met behulp van een algoritme geselecteerd uit de CryptoAlgorithm enum: RC4x40, RC4x128, AESx128 of AESx256. IsEncrypted() rapporteert de huidige status en Decrypt() verwijdert de bescherming van een reeds geopend document.
#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");
}Annotaties
Annotaties voegen zichtbare notities, vormen en markeringen toe aan een pagina. Elk annotatietype is afgeleid van Annotation en wordt geconstrueerd met het doel-Page en een plaatsings-Rectangle, waarna het aan de pagina wordt toegevoegd via Annotaties() (een AnnotationCollection).
#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 velden worden beheerd via Aspose::Pdf::Forms::Form, bereikbaar via Document::Form(). Veldtypen zoals TextBoxField worden geconstrueerd als annotaties — met een Page en een Rectangle — en geregistreerd bij Form::Add().
#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");
}Tips en best practices
- Open invoerbestanden via pad met de
Documentconstructor; roepSave()aan met een expliciet uitvoerpad in plaats van de bron te overschrijven terwijl andere handles er nog open kunnen zijn. - Roep
Optimize()aan vóórSave()wanneer een document sterk bewerkt is — het verwijdert bronnen die niet langer door enige pagina worden gerefereerd. - Construeer rasterapparaten (
BmpDevice,PngDevice,JpegDevice,TiffDevice) één keer per resolutie en hergebruik ze over pagina’s heen in plaats van per pagina een apparaat opnieuw te maken. - Stel zowel een gebruikerswachtwoord als een eigenaarwachtwoord in bij het aanroepen van
Encrypt()— een leeg gebruikerswachtwoord laat elke viewer het bestand openen, terwijl het eigenaarwachtwoord wijzigingen in permissies regelt. - Houd annotatie- en veldobjecten (
TextAnnotation,TextBoxFielden soortgelijke) in leven tot na de terugkeer vanSave(), omdat het document referenties bevat naar de paginainhoud waaraan ze zijn toegevoegd.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
Save() produceert een bestand met ongewijzigde inhoud | Er werden bewerkingen uitgevoerd op een kopie van een pagina of annotatie in plaats van op het object verkregen van doc.Pages() | Wijzig het object dat rechtstreeks wordt geretourneerd door Pages(), Annotations() of Form() |
| Gerenderde afbeelding is leeg of blanco | Verkeerde pagina-index doorgegeven aan Process() | PageCollection is 1-geïndexeerd — pagina 1 is doc.Pages()[1], niet [0] |
Encrypt() produceert een bestand dat nog steeds zonder wachtwoord kan worden geopend | Gebruikerswachtwoord leeg gelaten | Geef een niet-lege tekenreeks als het userPassword argument |
| De geëxtraheerde tekst is leeg voor een gescande PDF | De pagina bevat alleen rasterafbeeldingsinhoud, geen tekstoperatoren | TextAbsorber leest tekstoperatoren; pagina’s met alleen afbeeldingen hebben er geen om te extraheren |
Veld toegevoegd met Form::Add() verschijnt niet op de pagina | Het Rectangle van het veld valt buiten de MediaBox van de pagina | Bevestig dat de rechthoekcoördinaten binnen de grenzen van Page::MediaBox() liggen |
FAQ
Is Aspose.PDF FOSS voor C++ afhankelijk van een commerciële PDF-bibliotheek?
Nee. Het is een vanaf nul C++20-implementatie zonder afhankelijkheid van enige commerciële PDF-stack, uitgebracht onder de MIT-licentie.
Kan ik een nieuwe PDF vanaf nul maken in plaats van een bestaande te openen?
Ja. Document heeft een standaardconstructor die een leeg document maakt; roep Pages().Add() aan om pagina’s toe te voegen vóór het opslaan.
Naar welke rasterformaten kan ik renderen?
BmpDevice, PngDevice, JpegDevice en TiffDevice renderen individuele pagina’s respectievelijk naar BMP, PNG, JPEG en TIFF.
Welke encryptie-algoritmen worden ondersteund?
CryptoAlgorithm biedt RC4x40, RC4x128, AESx128 en AESx256 aan, doorgegeven aan Document::Encrypt().
Waar ga ik vervolgens naartoe?
De ontwikkelaarsgids bevat speciale pagina’s voor document- en paginabeheer, PDF-native grafische afbeeldingen en vormen, annotaties en interactieve formulieren, en de hogere-niveau-facadeklassen die veelvoorkomende bestandsbewerkingen omsluiten.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
Document | Root-object — open, maak, sla op en optimaliseer een PDF |
Document.Pages() | Retourneert de PageCollection van het document |
Document.Encrypt() / Decrypt() | Bescherm een document met een wachtwoord of verwijder de bescherming ervan |
Document.Form() | Retourneert de AcroForm container van het document |
TextAbsorber | Extraheert platte tekst uit een document of pagina |
TextFragmentAbsorber | Extraheert gepositioneerde tekstfragmenten |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Render een pagina naar een rasterafbeeldingsformaat |
Resolution | Uitvoer-DPI doorgegeven aan een renderapparaat |
CryptoAlgorithm | Selectie van versleutelingsalgoritme: RC4 of AES, 40–256 bit |
Permissions | Toegangscontrole-vlaggen doorgegeven aan Encrypt() |
Annotation / AnnotationCollection | Basistype en container voor paginannotaties |
TextAnnotation | Tekstnotitie-annotatie |
Form | AcroForm veldcontainer bereikt via Document.Form() |
TextBoxField | Enkelregelige/meervoudige regel tekstformulierveld |