Introductie
Aspose.PDF FOSS for C++ is een nieuwe open‑source bibliotheek voor het werken met PDF‑documenten vanuit C++20‑code. Hij wordt uitgebracht onder de MIT‑licentie en heeft geen runtime‑afhankelijkheid buiten de C++‑standaardbibliotheek — de BMP, JPEG, en TIFF‑encoders, de page rasteriser, en de PDF parser zijn intern geïmplementeerd, zodat er geen koppeling is naar een commerciële PDF‑engine, een externe image codec, of een third‑party cryptography library.
De bibliotheek is georganiseerd rond de Aspose::Pdf::Document-klasse, die een PDF laadt vanaf een bestandspad en de inhoud beschikbaar maakt via Document.Pages(), een PageCollection van individuele Page‑objecten. Vanaf daar behandelt de API tekstextractie, pagina‑rasterisatie, documentversleuteling, annotaties en AcroForm‑velden — de bewerkingen die nodig zijn om bestaande PDF‑bestanden te lezen, te inspecteren en te wijzigen, of om vanaf nul nieuwe samen te stellen.
Deze release is bedoeld voor ontwikkelaars die PDF‑verwerking nodig hebben binnen een C++‑codebase zonder een commerciële licentie of een third‑party dependency chain toe te voegen: document‑pipelines, content‑extraction services, PDF‑to‑image conversion tools, en applicaties die formulieren moeten encrypten of formuliergegevens moeten uitlezen als onderdeel van een grotere build.
Wat er inbegrepen is
Documentladen en Pagina‑toegang
Het openen van een bestaande PDF is één enkele constructor‑aanroep. Document parseert het bestand en maakt de pagina’s beschikbaar via Pages(), die een PageCollection retourneert die 1‑gebaseerde indexering, Count() en Add()/Insert()/Delete() ondersteunt voor het herschikken van de paginavolgorde.
#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";
}
Tekstextractie
Aspose::Pdf::Text::TextAbsorber doorloopt een Document of een enkele Page en verzamelt de tekstinhoud die het tegenkomt. Roep Visit() aan met een document of een pagina, en lees vervolgens het resultaat met Text(). HasErrors() geeft aan of de absorber inhoud tegenkwam die niet kon worden verwerkt.
#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";
}
}
Renderen naar rasterafbeeldingen
Pagina’s renderen naar BMP, JPEG of TIFF via de klassen BmpDevice, JpegDevice en TiffDevice. Elk apparaat wordt gecreëerd met een Resolution en biedt een Process(page, output)‑methode die de gerenderde afbeelding naar een output‑stream schrijft.
#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);
}
Encryptie
Document.Encrypt() beschermt een document met een gebruikerswachtwoord, een eigenaarswachtwoord, een permissiewaarde en een CryptoAlgorithm‑selectie. De enum omvat RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) en AES-256 (AESx256). Document.Decrypt() keert de bewerking om, en IsEncrypted() geeft aan of een document momenteel versleuteld is.
#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
Elke Page maakt een AnnotationCollection beschikbaar via Annotations(). Een TextAnnotation wordt geconstrueerd ten opzichte van het bijbehorende document, gepositioneerd met een Rectangle, en toegevoegd aan de collectie van de pagina met 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");
}
AcroForm-velden
Document.Form() retourneert het Form van het document, dat bestaande velden beschikbaar maakt via Fields() als een std::vector<Field*>. Elk Field geeft zijn naam en huidige waarde weer via PartialName() en Value(), en Form.Flatten() verwerkt het uiterlijk van elk veld in de paginainhoud, waardoor interactiviteit wordt verwijderd.
#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");
}
Snelstart
Voeg de bibliotheek toe als een CMake‑subdirectory en link tegen de aspose_pdf_foss‑target:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Open een document, druk het aantal pagina’s af, extraheer de tekst, en render de eerste pagina naar een BMP-bestand:
#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);
}
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG en TIFF zijn pagina-renderingsuitvoer die door hun respectieve apparaatklassen worden geproduceerd. Tekst wordt uit een PDF gehaald via TextAbsorber. SVG wordt geïmporteerd als vectorinhoud via het SVG‑laadpad van de bibliotheek.
Open source & licenties
Aspose.PDF FOSS voor C++ wordt gedistribueerd onder de MIT-licentie, met de volledige broncode beschikbaar op github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. De licentie staat commercieel gebruik, wijziging en herdistributie toe zonder een afzonderlijke overeenkomst.