Ú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át | Rozšíření | Číst | Zapsat |
|---|---|---|---|
| BMP | bmp | — | ✓ |
| JPEG | jpeg | — | ✓ |
| TIFF | tiff | — | ✓ |
| Text | txt | — | ✓ |
| SVG | svg | ✓ | — |
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.