Inleiding
Aspose.PDF FOSS for C++ is een open-source C++20 bibliotheek voor het werken met PDF-documenten. Het API oppervlak omvat document- en paginabeheer, tekstextractie, rasterrendering, encryptie, annotaties en interactieve AcroForm velden — de bewerkingen die het vaakst nodig zijn wanneer een C++-applicatie PDF-bestanden moet creëren, inspecteren of transformeren zonder afhankelijk te zijn van een externe PDF-engine of een commercieel SDK.
De bibliotheek linkt alleen tegen de C++-standaardbibliotheek. Interne componenten zoals de BMP-, JPEG- en TIFF-rasterencoders en de paginarasterizer zijn vanaf nul geïmplementeerd binnen het project, zodat er geen afhankelijkheid bestaat van een systeem-PDF-renderer, een commercieel PDF-component of een externe afbeeldingscodec. Dit houdt de afhankelijkheidsvoetafdruk op nul, behalve een C++20-conforme compiler en standaardbibliotheek.
Aspose.PDF FOSS for C++ wordt uitgebracht onder de MIT-licentie. Deze post loopt de belangrijkste functiegebieden door die worden blootgesteld door de Document-klasse en de ondersteunende types, gevolgd door een Snelstart-voorbeeld en de momenteel bevestigde formaatondersteuning.
Belangrijkste kenmerken
Document- en paginabeheer
De Document-klasse is het toegangspunt voor het openen, inspecteren en opslaan van PDF-bestanden. Pagina’s worden benaderd via Document.Pages(), die een PageCollection retourneert die Count(), Add(), Insert(pageNumber) en Delete(pageNumber) ondersteunt. Metagegevens op documentniveau worden gelezen en bijgewerkt via Document.Info() (een DocumentInfo-instantie) of direct ingesteld met 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() en Document.OptimizeResources() verkleinen de output-bestandsgrootte door ongebruikte resources te consolideren en te verwijderen vóór het opslaan.
Tekstextractie
Aspose::Pdf::Text::TextAbsorber extraheert de platte-tekstinhoud van een heel document of een enkele pagina. Visit() doorloopt het doel en Text() retourneert de opgehoopte string. TextFragmentAbsorber werkt op een fijnere granulariteit en maakt individuele tekstruns bloot via een 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";
}
Renderen naar rasterafbeeldingen
Pagina’s renderen naar rasterformaten via per-formaat apparaatklassen — PngDevice, JpegDevice, BmpDevice en TiffDevice — die elk Process(page, output) implementeren. De uitvoerresolutie wordt geregeld met de Resolution klasse.
#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 volgt hetzelfde Process(page, output) patroon voor JPEG-output. TiffDevice ondersteunt bovendien multi-page output in één enkele oproep via Process(document, fromPage, toPage, output), en stelt RenderingOptions() beschikbaar om te bepalen hoe formuliervelden worden gerenderd naar de rasteroutput.
Encryptie en toegangsrechten
Document.Encrypt() beveiligt een document met een gebruikers- en eigenaarswachtwoord, waarbij het cipher wordt geselecteerd via de CryptoAlgorithm enum: RC4x40, RC4x128, AESx128 of AESx256. Toegewezen rechten worden beschreven met het Permissions type, waarvan de vlagwaarden PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument en PrintingQuality omvatten.
#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");
}
Een al geopend versleuteld document wordt ter plaatse ontsleuteld met Document.Decrypt(). Document.IsEncrypted() meldt of een geladen document momenteel een encryptiewoordenboek bevat.
Annotaties
Pagina-niveau annotaties — tekstnotities, vormen en opmaak — worden bereikt via Page.Annotaties(), die een AnnotationCollection retourneert. Individuele items tonen gedeelde eigenschappen zoals Contents(), Rect(), Color(), Border() en AnnotationType(), en kunnen van de pagina worden verwijderd of worden afgevlakt tot statische inhoud.
#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");
}
Elke afzonderlijke Annotation kan ook rechtstreeks naar statische paginainhoud worden geconverteerd met zijn eigen Flatten()-methode, onafhankelijk van de hieronder beschreven formulier-afvlakkingsworkflow.
Interactieve formulieren
AcroForm velden op een document worden beheerd via Document.Form(), die een Form-instantie retourneert die Count(), HasField(fieldName), Delete(fieldName) en Flatten() ondersteunt. Nieuwe velden worden toegevoegd met Form.Add(field, pageNumber), waarbij field een concrete Field-subtype is, zoals TextBoxField, CheckboxField, ChoiceField of 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");
}
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, extraheer de tekst en render de eerste pagina naar 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);
}
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| BMP | bmp | — | ✓ |
| JPEG | jpeg | — | ✓ |
| TIFF | tiff | — | ✓ |
| Text | txt | — | ✓ |
| SVG | svg | ✓ | — |
Open source & licenties
Aspose.PDF FOSS voor C++ is uitgebracht onder de MIT-licentie, die commercieel gebruik, modificatie en herdistributie zonder royalty’s toestaat. De broncode is beschikbaar op github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.
Commercieel gebruik is toegestaan onder de voorwaarden van de MIT-licentie. Als uw project enterprise-ondersteuning, uitgebreide formatdekking of cloudintegratie vereist, is de Aspose.PDF — Enterprise Product Family een aparte commerciële aanbieding.