Introduktion

Aspose.PDF FOSS för C++ är ett nytt open-source‑bibliotek för att arbeta med PDF‑dokument från C++20‑kod. Det är släppt under MIT‑licensen och har inga körtidsberoenden utöver C++‑standardbiblioteket — BMP-, JPEG- och TIFF‑kodarna, sidrastriseraren och PDF‑tolkaren är implementerade internt, så det finns ingen länk till en kommersiell PDF‑motor, en extern bildkodare eller ett tredje‑parts kryptografibibliotek.

Biblioteket är organiserat kring klassen Aspose::Pdf::Document, som laddar en PDF från en filsökväg och exponerar dess innehåll via Document.Pages(), en PageCollection av enskilda Page-objekt. Därifrån täcker API textutdrag, sidrastrering, dokumentkryptering, annotationer och AcroForm-fält — de operationer som behövs för att läsa, inspektera och modifiera befintliga PDF-filer, eller skapa nya från grunden.

Denna version är avsedd för utvecklare som behöver PDF‑behandling i en C++‑kodbas utan att lägga till en kommersiell licens eller en tredje‑parts beroendekedja: dokument‑pipeline, tjänster för innehållsextraktion, PDF‑till‑bild‑konverteringsverktyg och applikationer som behöver kryptera eller läsa tillbaka formulärdata som en del av en större byggprocess.


Vad som ingår

Laddning av dokument och sidåtkomst

Att öppna en befintlig PDF är ett enda anropskonstruktor. Document parsar filen och exponerar dess sidor via Pages(), som returnerar en PageCollection som stödjer 1-baserad indexering, Count(), och Add()/Insert()/Delete() för att omstrukturera sidordningen.

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

Textutdrag

Aspose::Pdf::Text::TextAbsorber går igenom ett Document eller en enskild Page och samlar in den textinnehåll den hittar. Anropa Visit() med antingen ett dokument eller en sida, läs sedan resultatet med Text(). HasErrors() rapporterar om absorberen stötte på innehåll som den inte kunde bearbeta.

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

Rendering till rasterbilder

Sidor renderas till BMP, JPEG eller TIFF via klasserna BmpDevice, JpegDevice och TiffDevice. Varje enhet konstrueras med en Resolution och exponerar en Process(page, output)-metod som skriver den renderade bilden till en utskriftsström.

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

Kryptering

Document.Encrypt() skyddar ett dokument med ett användarlösenord, ett ägarlösenord, ett behörighetsvärde och ett val av CryptoAlgorithm. Enumet täcker RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) och AES-256 (AESx256). Document.Decrypt() vänder på operationen, och IsEncrypted() rapporterar om ett dokument för närvarande är krypterat.

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

Anmärkningar

Varje Page exponerar en AnnotationCollection via Annotations(). En TextAnnotation konstrueras mot det ägande dokumentet, placeras med en Rectangle och läggs till sidans samling med 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-fält

Document.Form() returnerar dokumentets Form, som exponerar befintliga fält via Fields() som en std::vector<Field*>. Varje Field rapporterar sitt namn och aktuella värde via PartialName() och Value(), och Form.Flatten() bakar in varje fälts utseende i sidans innehåll, vilket tar bort interaktiviteten.

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

Snabbstart

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

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

Öppna ett dokument, skriv ut dess sidantal, extrahera dess text och rendera den första sidan till en BMP-fil:

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

Stödda format

FormatFiländelseLäsaSkriva
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

BMP, JPEG och TIFF är sidrenderingsutdata som produceras av deras respektive enhetsklasser. Text extraheras från en PDF via TextAbsorber. SVG importeras som vektor-innehåll via bibliotekets SVG‑laddningsväg.


Öppen källkod & licensiering

Aspose.PDF FOSS för C++ distribueras under MIT‑licensen, med hela källkoden tillgänglig på github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licensen tillåter kommersiell användning, modifiering och omdistribution utan ett separat avtal.


Komma igång

Relaterade resurser