Úvod

Aspose.PDF FOSS pro C++ je open-source knihovna C++20 pro práci s PDF dokumenty. Rozhraní API zahrnuje správu dokumentů a stránek, extrakci textu, rasterové vykreslování, šifrování, anotace a interaktivní pole AcroForm — operace, které jsou nejčastěji potřebné, když C++ aplikace musí vytvářet, prohlížet nebo transformovat PDF soubory bez závislosti na externím PDF enginu nebo komerčním SDK.

Knihovna se linkuje pouze se standardní knihovnou C++. Interní komponenty jako rasterové enkodéry BMP, JPEG a TIFF a rasterizér stránky jsou implementovány od nuly v rámci projektu, takže neexistuje žádná závislost na systémovém PDF rendereru, komerční PDF komponentě ani na žádném třetím image kodeku. To udržuje stopu závislostí na nule kromě C++20-kompatibilního kompilátoru a standardní knihovny.

Aspose.PDF FOSS pro C++ je vydán pod licencí MIT. Tento příspěvek provádí hlavní oblasti funkcí vystavených třídou Document a jejími podpůrnými typy, následovaný příkladem Rychlý start a aktuálně potvrzenou podporou formátů.


Klíčové funkce

Správa dokumentů a stránek

Třída Document je vstupním bodem pro otevírání, prohlížení a ukládání PDF souborů. Stránky jsou přístupné přes Document.Pages(), která vrací PageCollection podporující Count(), Add(), Insert(pageNumber) a Delete(pageNumber). Metadata na úrovni dokumentu jsou čtena a aktualizována přes Document.Info() (instance DocumentInfo) nebo nastavená přímo pomocí 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() a Document.OptimizeResources() snižují velikost výstupního souboru konsolidací a odstraňováním nepoužívaných zdrojů před uložením.

Extrahování textu

Aspose::Pdf::Text::TextAbsorber extrahuje čistý textový obsah celého dokumentu nebo jedné stránky. Visit() prochází cíl a Text() vrací nahromaděný řetězec. TextFragmentAbsorber pracuje na jemnější úrovni, vystavuje jednotlivé textové úseky přes 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";
}

Vykreslování do rastrových obrázků

Stránky se vykreslují do rastrových formátů pomocí zařízení specifických pro formát — PngDevice, JpegDevice, BmpDevice a TiffDevice — z nichž každé implementuje Process(page, output). Rozlišení výstupu se řídí třídou 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 používá stejný vzor Process(page, output) pro výstup JPEG. TiffDevice navíc podporuje vícestránkový výstup v jednom volání prostřednictvím Process(document, fromPage, toPage, output) a poskytuje RenderingOptions() pro řízení, jak jsou formulářová pole vykreslena do rastrového výstupu.

Šifrování a oprávnění k přístupu

Document.Encrypt() chrání dokument uživatelským a vlastníckým heslem, přičemž šifru vybírá pomocí výčtu CryptoAlgorithm: RC4x40, RC4x128, AESx128 nebo AESx256. Udělená oprávnění jsou popsána typem Permissions, jehož hodnoty příznaků zahrnují PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument a 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");
}

Již otevřený šifrovaný dokument je dešifrován na místě pomocí Document.Decrypt(). Document.IsEncrypted() hlásí, zda načtený dokument v současnosti obsahuje šifrovací slovník.

Anotace

Anotace na úrovni stránky — textové poznámky, tvary a značky — jsou dostupné přes Page.Anotace(), který vrací AnnotationCollection. Individuální položky odhalují společné vlastnosti jako Contents(), Rect(), Color(), Border() a AnnotationType() a mohou být ze stránky odstraněny nebo zploštěny do statického obsahu.

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

Jakýkoli jednotlivý Annotation může být také přímo převeden na statický obsah stránky pomocí své vlastní metody Flatten(), nezávisle na workflow ploštění formulářů popsaném níže.

Interaktivní formuláře

AcroForm pole v dokumentu jsou spravována přes Document.Form(), který vrací instanci Form podporující Count(), HasField(fieldName), Delete(fieldName) a Flatten(). Nová pole jsou připojena pomocí Form.Add(field, pageNumber), kde field je konkrétní podtyp Field, například TextBoxField, CheckboxField, ChoiceField nebo 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");
}

Rychlý start

Přidejte knihovnu jako podadresář CMake a propojte se s cílem aspose_pdf_foss:

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

Otevřete dokument, extrahujte jeho text a vykreslete první stránku do 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);
}

Podporované formáty

FormátRozšířeníČístZapsat
BMPbmp—✓
JPEGjpeg—✓
TIFFtiff—✓
Texttxt—✓
SVGsvg✓—

Open source a licence

Aspose.PDF FOSS pro C++ je vydáno pod licencí MIT, která umožňuje komerční použití, úpravy a redistribuci bez poplatků. Zdrojový kód je k dispozici na github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.

Komerční použití je povoleno podle podmínek licence MIT. Pokud váš projekt vyžaduje podporu na úrovni podniku, rozšířené pokrytí formátů nebo integraci s cloudem, Aspose.PDF — Enterprise Product Family je samostatná komerční nabídka.


Začínáme

Související zdroje