Úvod
Aspose.PDF FOSS for C++ je nová open-source knihovna pro práci s PDF dokumenty z kódu C++20. Je vydána pod licencí MIT a nevyžaduje žádnou runtime závislost nad rámec standardní knihovny C++ — enkodéry BMP, JPEG a TIFF, rasterizér stránek a parser PDF jsou implementovány interně, takže neexistuje odkaz na komerční PDF engine, externí image codec nebo třetí stranu kryptografické knihovny.
Knihovna je uspořádána kolem třídy Aspose::Pdf::Document, která načte PDF ze souborové cesty a zpřístupní jeho obsah prostřednictvím Document.Pages(), což je PageCollection jednotlivých objektů Page. Odtud API zahrnuje extrakci textu, rasterizaci stránek, šifrování dokumentu, anotace a pole AcroForm — operace potřebné pro čtení, kontrolu a úpravu existujících PDF souborů nebo sestavení nových od nuly.
Toto vydání je určeno vývojářům, kteří potřebují zpracování PDF v rámci C++ kódu bez přidání komerční licence nebo řetězce závislostí třetích stran: dokumentační pipeline, služby pro extrakci obsahu, nástroje pro konverzi PDF na obraz a aplikace, které potřebují šifrovat nebo zpětně číst data formulářů jako součást většího buildu.
Co je zahrnuto
Načítání dokumentu a přístup ke stránkám
Otevření existujícího PDF je jediný volání konstruktoru. Document parsuje soubor a zpřístupní jeho stránky prostřednictvím Pages(), která vrací PageCollection podporující indexování od jedné, Count() a Add()/Insert()/Delete() pro přeskupení pořadí stránek.
#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";
}
Extrahování textu
Aspose::Pdf::Text::TextAbsorber prochází Document nebo jedinou Page a sbírá nalezený textový obsah. Zavolejte Visit() s dokumentem nebo stránkou a pak výsledek přečtěte pomocí Text(). HasErrors() oznamuje, zda absorbera narazil na obsah, který nemohl zpracovat.
#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";
}
}
Vykreslování do rastrových obrázků
Stránky se vykreslují do BMP, JPEG nebo TIFF pomocí tříd BmpDevice, JpegDevice a TiffDevice. Každé zařízení je vytvořeno s Resolution a poskytuje metodu Process(page, output), která zapíše vykreslený obrázek do výstupního proudu.
#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);
}
Šifrování
Document.Encrypt() chrání dokument uživatelským heslem, heslem vlastníka, hodnotou oprávnění a výběrem CryptoAlgorithm. Výčtový typ zahrnuje RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) a AES-256 (AESx256). Document.Decrypt() operaci obrátí a IsEncrypted() oznamuje, zda je dokument v současnosti zašifrován.
#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");
}
Anotace
Každá Page zpřístupňuje AnnotationCollection prostřednictvím Annotations(). TextAnnotation se vytváří vůči vlastnickému dokumentu, umisťuje se pomocí Rectangle a přidává se do kolekce stránky pomocí 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");
}
Pole AcroForm
Document.Form() vrací Form dokumentu, který zpřístupňuje existující pole přes Fields() jako std::vector<Field*>. Každé Field uvádí svůj název a aktuální hodnotu pomocí PartialName() a Value(), a Form.Flatten() zapracuje vzhled každého pole do obsahu stránky, čímž odstraní interaktivitu.
#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");
}
Rychlý start
Přidejte knihovnu jako podadresář CMake a propojte ji 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, vypište počet jeho stránek, extrahujte jeho text a vykreslete první stránku do souboru BMP:
#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);
}
Podporované formáty
| Formát | Přípona | Číst | Zapsat |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG a TIFF jsou výstupy pro vykreslování stránek generované příslušnými třídami zařízení. Text je z PDF extrahován pomocí TextAbsorber. SVG je importováno jako vektorový obsah prostřednictvím cesty načítání SVG knihovny.
Open source a licence
Aspose.PDF FOSS pro C++ je distribuováno pod licencí MIT, s kompletním zdrojovým kódem dostupným na github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licence povoluje komerční použití, úpravy a redistribuci bez samostatné smlouvy.