Bevezetés

Aspose.PDF FOSS for C++ egy nyílt forráskódú C++20 könyvtár PDF dokumentumokkal való munkához. A API felület magában foglalja a dokumentum- és oldalkezelést, a szövegkinyerést, a raszter renderelést, a titkosítást, a megjegyzéseket és az interaktív AcroForm mezőket – a leggyakrabban szükséges műveleteket, amikor egy C++ alkalmazásnak PDF fájlokat kell létrehoznia, vizsgálnia vagy átalakítania anélkül, hogy külső PDF motorra vagy kereskedelmi SDK-ra támaszkodna.

A könyvtár csak a C++ szabványos könyvtárra hivatkozik. A BMP, JPEG és TIFF raszter enkóderek, valamint az oldalraszterizáló belső komponensek a projekten belül teljesen a semmiből vannak megvalósítva, így nincs függőség sem rendszer-PDF renderelőre, sem kereskedelmi PDF komponensre, sem harmadik féltől származó képkódolóra. Ez a függőségi lábnyomot nullára korlátozza a C++20-kompatibilis fordító és a szabványos könyvtár mellett.

Aspose.PDF FOSS for C++ az MIT licenc alatt érhető el. Ez a bejegyzés végigvezet a Document osztály és a támogató típusok által kínált fő funkciók területein, majd egy Gyors Kezdés példát és a jelenleg megerősített formátumtámogatást mutatja be.


Kulcsfontosságú funkciók

Dokumentum- és oldalkezelés

A Document osztály a belépési pont a PDF fájlok megnyitásához, vizsgálatához és mentéséhez. Az oldalakat a Document.Pages() segítségével érhetjük el, amely egy PageCollection-t ad vissza, amely támogatja a Count(), Add(), Insert(pageNumber) és Delete(pageNumber) elemeket. A dokumentumszintű metaadatok olvashatók és frissíthetők a Document.Info() (egy DocumentInfo példány) segítségével, vagy közvetlenül a Document.SetTitle() használatával.

#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() és Document.OptimizeResources() csökkentik a kimeneti fájl méretét azáltal, hogy egyesítik és eltávolítják a nem használt erőforrásokat a mentés előtt.

Szövegkinyerés

Aspose::Pdf::Text::TextAbsorber kinyeri a teljes dokumentum vagy egyetlen oldal egyszerű szöveges tartalmát. Visit() bejárja a célt, és Text() visszaadja az összegyűjtött karakterláncot. TextFragmentAbsorber finomabb részletességgel dolgozik, egy TextFragmentCollection segítségével teszi elérhetővé az egyedi szövegrészeket.

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

Renderelés raszteres képekre

Az oldalak raszteres formátumokba renderelődnek formátumonkénti eszközosztályok segítségével — PngDevice, JpegDevice, BmpDevice és TiffDevice — amelyek mindegyike a Process(page, output) megvalósítja. A kimeneti felbontást a Resolution osztály szabályozza.

#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 a JPEG kimenethez ugyanazt a Process(page, output) mintát követi. TiffDevice továbbá támogatja a többoldalas kimenetet egyetlen hívásban a Process(document, fromPage, toPage, output) segítségével, és elérhetővé teszi a RenderingOptions()-t a űrlapmezők raszteres kimenetre történő renderelésének vezérléséhez.

Titkosítás és hozzáférési engedélyek

Document.Encrypt() felhasználói és tulajdonosi jelszóval védi a dokumentumot, a titkosítót a CryptoAlgorithm felsorolás (enum) segítségével választva: RC4x40, RC4x128, AESx128 vagy AESx256. A megadott engedélyeket a Permissions típus írja le, amelynek zászlóértékei között szerepelnek a PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument és 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");
}

Egy már megnyitott titkosított dokumentum helyben kerül visszafejtésre a Document.Decrypt() segítségével. A Document.IsEncrypted() jelzi, hogy a betöltött dokumentum jelenleg tartalmaz-e titkosítási szótárat.

Megjegyzések

Az oldal szintű annotációk — szöveges jegyzetek, alakzatok és jelölések — a Page.Annotations() segítségével érhetők el, amely egy AnnotationCollection objektumot ad vissza. Az egyes bejegyzések közös tulajdonságokat tárnak fel, mint például Contents(), Rect(), Color(), Border() és AnnotationType(), és eltávolíthatók az oldalról vagy lapos, statikus tartalommá alakíthatók.

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

Bármely egyetlen Annotation közvetlenül átalakítható statikus oldal tartalommá a saját Flatten() metódusával, függetlenül az alább leírt űrlap-lapítási munkafolyamtól.

Interaktív űrlapok

AcroForm mezők egy dokumentumban a Document.Form() segítségével kezelhetők, amely egy Form példányt ad vissza, amely támogatja a Count(), HasField(fieldName), Delete(fieldName) és Flatten() funkciókat. Új mezőket a Form.Add(field, pageNumber) segítségével lehet csatolni, ahol a field egy konkrét Field alosztály, például TextBoxField, CheckboxField, ChoiceField vagy 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");
}

Gyors kezdés

Add hozzá a könyvtárat CMake alkönyvtárként, és linkelj a aspose_pdf_foss célra:

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

Nyisson meg egy dokumentumot, vonja ki a szövegét, és renderelje az első oldalt PNG formátumba:

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

Támogatott formátumok

FormátumKiterjesztésOlvasásÍrás
BMPbmp—✓
JPEGjpeg—✓
TIFFtiff—✓
Texttxt—✓
SVGsvg✓—

Nyílt forráskódú & licencelés

Aspose.PDF FOSS for C++ MIT licenc alatt került kiadásra, amely megengedi a kereskedelmi felhasználást, módosítást és újraelosztást jogdíj nélkül. A forrás elérhető itt: github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.

A kereskedelmi felhasználás megengedett a MIT licenc feltételei szerint. Ha projektje vállalati szintű támogatást, kibővített formátum lefedettséget vagy felhőintegrációt igényel, a Aspose.PDF — Enterprise Product Family egy külön kereskedelmi ajánlat.


Első lépések

Kapcsolódó források