Introducere

Aspose.PDF FOSS pentru C++ este o bibliotecă open-source C++20 pentru lucrul cu documente PDF. Suprafața API acoperă gestionarea documentelor și a paginilor, extragerea de text, randarea raster, criptarea, adnotările și câmpurile interactive AcroForm — operațiile cele mai frecvent necesare când o aplicație C++ trebuie să creeze, să inspecteze sau să transforme fișiere PDF fără a depinde de un motor PDF extern sau de un SDK comercial.

Biblioteca se leagă doar de biblioteca standard C++. Componentele interne, cum ar fi codificatoarele raster BMP, JPEG și TIFF și rasterizatorul de pagini, sunt implementate de la zero în interiorul proiectului, astfel încât nu există nicio dependență de un renderer PDF al sistemului, un component PDF comercial sau orice codec de imagini terț. Aceasta menține amprenta de dependențe la zero, în afara unui compilator conform C++20 și a bibliotecii standard.

Aspose.PDF FOSS pentru C++ este lansat sub licența MIT. Acest articol parcurge principalele zone de funcționalitate expuse de clasa Document și tipurile sale de suport, urmat de un exemplu Începe rapid și de suportul de format confirmat în prezent.


Caracteristici cheie

Gestionarea documentelor și a paginilor

Clasa Document este punctul de intrare pentru deschiderea, inspectarea și salvarea fișierelor PDF. Paginile sunt accesate prin Document.Pages(), care returnează un PageCollection ce suportă Count(), Add(), Insert(pageNumber) și Delete(pageNumber). Metadatele la nivel de document sunt citite și actualizate prin Document.Info() (o instanță DocumentInfo) sau setate direct cu 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() și Document.OptimizeResources() reduc dimensiunea fișierului de ieșire prin consolidarea și eliminarea resurselor neutilizate înainte de salvare.

Extracție de text

Aspose::Pdf::Text::TextAbsorber extrage conținutul text simplu al unui document întreg sau al unei singure pagini. Visit() parcurge ținta și Text() returnează șirul acumulat. TextFragmentAbsorber funcționează la o granularitate mai fină, expunând secvențe individuale de text printr-un 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";
}

Redare în imagini raster

Paginile sunt redate în formate raster prin clase de dispozitiv specifice fiecărui format — PngDevice, JpegDevice, BmpDevice și TiffDevice — fiecare implementând Process(page, output). Rezoluția de ieșire este controlată cu clasa Resolution.

#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 urmează același tipar Process(page, output) pentru ieșire JPEG. TiffDevice suportă suplimentar ieșire multi-pagină într-un singur apel prin Process(document, fromPage, toPage, output), și expune RenderingOptions() pentru a controla modul în care câmpurile de formular sunt redate în ieșirea raster.

Criptare și permisiuni de acces

Document.Encrypt() protejează un document cu o parolă de utilizator și una de proprietar, selectând cifrul prin enumerația CryptoAlgorithm: RC4x40, RC4x128, AESx128 sau AESx256. Permisiunile acordate sunt descrise cu tipul Permissions, ale căror valori de steag includ PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument și PrintingQuality.

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

Un document criptat deja deschis este decriptat la loc cu Document.Decrypt(). Document.IsEncrypted() raportează dacă un document încărcat conține în prezent un dicționar de criptare.

Adnotări

Adnotările la nivel de pagină — note text, forme și marcaje — se accesează prin Page.Annotations(), care returnează un AnnotationCollection. Intrările individuale expun proprietăți comune precum Contents(), Rect(), Color(), Border() și AnnotationType(), și pot fi eliminate de pe pagină sau aplatizate în conținut static.

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

Orice Annotation singular poate fi, de asemenea, convertit în conținut static al paginii direct cu propria metodă Flatten(), independent de fluxul de lucru de aplatizare a formularelor descris mai jos.

Formulare interactive

Câmpurile AcroForm dintr-un document sunt gestionate prin Document.Form(), care returnează o instanță Form ce suportă Count(), HasField(fieldName), Delete(fieldName) și Flatten(). Câmpurile noi sunt atașate cu Form.Add(field, pageNumber), unde field este un subtip concret Field precum TextBoxField, CheckboxField, ChoiceField sau 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");
}

Începe rapid

Adăugați biblioteca ca subdirector CMake și legați-vă de ținta aspose_pdf_foss:

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

Deschide un document, extrage textul său și redă prima pagină în 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);
}

Formate acceptate

FormatExtensieCitireScriere
BMPbmp—✓
JPEGjpeg—✓
TIFFtiff—✓
Texttxt—✓
SVGsvg✓—

Open Source și Licențiere

Aspose.PDF FOSS pentru C++ este lansat sub licența MIT, permițând utilizarea comercială, modificarea și redistribuirea fără redevențe. Codul sursă este disponibil la github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.

Utilizarea comercială este permisă conform termenilor licenței MIT. Dacă proiectul tău necesită suport la nivel enterprise, acoperire extinsă de formate sau integrare în cloud, Aspose.PDF — Enterprise Product Family este o ofertă comercială separată.


Începeți

Resurse conexe