Introduktion

Aspose.PDF FOSS för C++ är ett open-source C++20-bibliotek för att arbeta med PDF-dokument. API-ytan täcker dokument- och sidhantering, textutvinning, rasterrendering, kryptering, annotationer och interaktiva AcroForm-fält — de operationer som oftast behövs när ett C++-program måste skapa, inspektera eller omvandla PDF-filer utan att förlita sig på en extern PDF-motor eller ett kommersiellt SDK.

Biblioteket länkar bara mot C++ standardbiblioteket. Interna komponenter såsom BMP-, JPEG- och TIFF-rasterkodare samt sidrasteriseraren är implementerade från grunden i projektet, så det finns inget beroende av en system-PDF-renderare, en kommersiell PDF-komponent eller någon tredje-parts bildkodare. Detta håller beroendefotavtrycket på noll utöver en C++20-kompatibel kompilator och standardbiblioteket.

Aspose.PDF FOSS för C++ släpps under MIT-licensen. Detta inlägg går igenom de huvudsakliga funktionsområdena som exponeras av Document-klassen och dess stödjande typer, följt av ett Snabbstart-exempel och det för närvarande bekräftade formatstödet.


Nyckelfunktioner

Dokument- och sidhantering

Document-klassen är inträdespunkten för att öppna, inspektera och spara PDF-filer. Sidor nås via Document.Pages(), som returnerar en PageCollection som stöder Count(), Add(), Insert(pageNumber) och Delete(pageNumber). Dokumentnivå-metadata läses och uppdateras via Document.Info() (en DocumentInfo-instans) eller sätts direkt med 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() och Document.OptimizeResources() minskar utdatafilens storlek genom att konsolidera och rensa oanvända resurser innan de sparas.

Textutdragning

Aspose::Pdf::Text::TextAbsorber extraherar det rena textinnehållet i ett helt dokument eller en enskild sida. Visit() går igenom målet och Text() returnerar den ackumulerade strängen. TextFragmentAbsorber arbetar på en finare granularitet, och exponerar enskilda textrader via en 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";
}

Rendering till rasterbilder

Sidor renderas till rasterformat via per-format enhetsklasser — PngDevice, JpegDevice, BmpDevice och TiffDevice — som alla implementerar Process(page, output). Utdatans upplösning styrs med klassen 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 följer samma Process(page, output)-mönster för JPEG-utdata. TiffDevice stödjer dessutom flersidigt utdata i ett enda anrop via Process(document, fromPage, toPage, output), och exponerar RenderingOptions() för att kontrollera hur formulärfält renderas in i rasterutdata.

Kryptering och åtkomstbehörigheter

Document.Encrypt() skyddar ett dokument med ett användar- och ägarlösenord, och väljer chiffer genom CryptoAlgorithm-enumerationen: RC4x40, RC4x128, AESx128 eller AESx256. Beviljade behörigheter beskrivs med typen Permissions, vars flaggvärden inkluderar PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument och 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");
}

Ett redan öppnat krypterat dokument dekrypteras på plats med Document.Decrypt(). Document.IsEncrypted() rapporterar huruvida ett laddat dokument för närvarande har en krypteringsordbok.

Anmärkningar

Sidnivå-anmärkningar — textanteckningar, former och markup — nås via Page.Annotations(), som returnerar en AnnotationCollection. Enskilda poster visar delade egenskaper såsom Contents(), Rect(), Color(), Border() och AnnotationType(), och kan tas bort från sidan eller plattas ut till statiskt innehåll.

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

Varje enskild Annotation kan också konverteras till statiskt sidinnehåll direkt med sin egen Flatten()-metod, oberoende av arbetsflödet för formulärplattning som beskrivs nedan.

Interaktiva formulär

AcroForm fält på ett dokument hanteras via Document.Form(), som returnerar en Form-instans som stödjer Count(), HasField(fieldName), Delete(fieldName) och Flatten(). Nya fält fästs med Form.Add(field, pageNumber), där field är en konkret Field-subtyp såsom TextBoxField, CheckboxField, ChoiceField eller 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");
}

Snabbstart

Lägg till biblioteket som en CMake-undermapp och länka mot aspose_pdf_foss-målet:

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

Öppna ett dokument, extrahera dess text och rendera den första sidan till 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);
}

Stödda format

FormatFiländelseLäsaSkriva
BMPbmp—✓
JPEGjpeg—✓
TIFFtiff—✓
Texttxt—✓
SVGsvg✓—

Öppen källkod & licensiering

Aspose.PDF FOSS för C++ är släppt under MIT-licensen, vilket tillåter kommersiell användning, modifiering och omdistribution utan royalties. Källkoden finns tillgänglig på github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.

Kommersiell användning är tillåten enligt MIT-licensens villkor. Om ditt projekt kräver företagsstöd av hög nivå, utökad formattäckning eller molnintegration, är Aspose.PDF — Enterprise Product Family ett separat kommersiellt erbjudande.


Komma igång

Relaterade resurser