Aspose.PDF FOSS for C++ Funcționalități
Aspose.PDF FOSS pentru C++ Caracteristici
Aspose.PDF FOSS pentru C++ este o bibliotecă C++20 pentru crearea, deschiderea, modificarea și salvarea documentelor PDF. Această pagină prezintă zonele majore de funcționalitate și clasele care servesc ca puncte de intrare. Fiecare zonă este tratată în profunzime pe propria pagină de ghid pentru dezvoltatori.
Gestionarea documentelor
Aspose::Pdf::Document este obiectul rădăcină pentru fiecare operație. Deschide un fișier existent dintr-o cale, expune colecția de pagini prin Pages() și păstrează modificările cu Save(). Optimize() și OptimizeResources() reduc dimensiunea fișierului prin eliminarea resurselor neutilizate sau duplicate.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& pages = doc.Pages();
pages.Add(); // append a blank page
pages.Delete(1); // remove the original first page
doc.Optimize();
doc.Save("output.pdf");
}Extracție de text
Aspose::Pdf::Text::TextAbsorber parcurge un document sau o singură pagină și colectează text simplu, care este obținut cu Text() după apelarea Visit(). TextFragmentAbsorber efectuează aceeași parcurgere, dar returnează obiecte individuale TextFragment prin TextFragments(), oferind acces la poziția și starea de text a fiecărui fragment.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
}Randare în imagini raster
Dispozitivele de randare a paginilor convertează un Page într-o imagine raster. BmpDevice, PngDevice, JpegDevice și TiffDevice împărtășesc aceeași semnătură Process(page, output) și sunt construite cu un Resolution care stabilește DPI-ul de ieșire.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Devices::BmpDevice device(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
device.Process(doc.Pages()[1], out);
}Criptare
Document::Encrypt() protejează un document cu parola utilizatorului (necesară pentru a-l deschide) și cu parola proprietarului (necesară pentru a modifica permisiunile), utilizând un algoritm selectat din enumerarea CryptoAlgorithm: RC4x40, RC4x128, AESx128 sau AESx256. IsEncrypted() raportează starea curentă și Decrypt() elimină protecția unui document deja deschis.
#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");
}Anotări
Anotările atașează note vizibile, forme și marcaje unei pagini. Fiecare tip de anotare derivă din Annotation și este construit cu Page țintă și cu o Rectangle de plasare, apoi este adăugat paginii prin Anotări() (un AnnotationCollection).
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Annotations::TextAnnotation note(
page, Aspose::Pdf::Rectangle(50.0, 700.0, 250.0, 740.0, false));
note.Contents("Reviewed and approved.");
page.Annotations().Add(note);
doc.Save("annotated.pdf");
}Forms
Câmpurile AcroForm sunt gestionate prin Aspose::Pdf::Forms::Form, accesibile prin Document::Form(). Tipurile de câmp, cum ar fi TextBoxField, sunt construite ca și anotările — cu un Page și un Rectangle — și sunt înregistrate la Form::Add().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_box_field.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Forms::TextBoxField field(
page, Aspose::Pdf::Rectangle(100.0, 650.0, 300.0, 670.0, false));
field.PartialName("customer_name");
field.Value("Jane Doe");
doc.Form().Add(field);
doc.Save("form_filled.pdf");
}Sfaturi și cele mai bune practici
- Deschide fișierele de intrare prin cale folosind constructorul
Document; apeleazăSave()cu o cale de ieșire explicită în loc să suprascrii sursa în timp ce alte handle-uri către el pot fi încă deschise. - Apelează
Optimize()înainte deSave()când un document a fost editat intens — aceasta elimină resursele care nu mai sunt referențiate de nicio pagină. - Construiește dispozitivele raster (
BmpDevice,PngDevice,JpegDevice,TiffDevice) o singură dată pentru fiecare rezoluție și reutilizează-le pe parcursul paginilor în loc să recreezi un dispozitiv pentru fiecare pagină. - Setează atât parola utilizatorului, cât și parola proprietarului când apelezi
Encrypt()— o parolă goală pentru utilizator permite oricărui vizualizator să deschidă fișierul, în timp ce parola proprietarului controlează modificările de permisiuni. - Păstrează obiectele de adnotare și de câmp (
TextAnnotation,TextBoxFieldși altele similare) active până după ceSave()se întoarce, deoarece documentul păstrează referințe la conținutul paginii la care au fost adăugate.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
Save() produce un fișier cu conținut neschimbat | Au fost făcute editări la o copie a paginii sau a adnotării în loc de obiectul obținut din doc.Pages() | Modificați obiectul returnat direct de Pages(), Annotations() sau Form() |
| Imaginea redată este goală sau albă | Index de pagină greșit transmis către Process() | PageCollection este indexat de la 1 — pagina 1 este doc.Pages()[1], nu [0] |
Encrypt() generează un fișier care se deschide în continuare fără parolă | Parola utilizatorului a rămas goală | Transmite un șir nevid ca argument userPassword |
| Textul extras este gol pentru un PDF scanat | Pagina conține doar conținut de imagine raster, nu operatori de text | TextAbsorber citește operatori de text; paginile care conțin doar imagini nu au niciunul pentru extragere |
Câmpul adăugat cu Form::Add() nu apare pe pagină | Câmpul Rectangle se află în afara MediaBox paginii | Confirmați că coordonatele dreptunghiului se încadrează în limitele Page::MediaBox() |
FAQ
Depinde Aspose.PDF FOSS pentru C++ de vreo bibliotecă PDF comercială?
Nu. Este o implementare C++20 de la zero, fără nicio dependență de vreun stack PDF comercial, lansată sub licența MIT.
Pot crea un PDF nou de la zero în loc să deschid unul existent?
Da. Document are un constructor implicit care creează un document gol; apelează Pages().Add() pentru a adăuga pagini înainte de salvare.
În ce formate raster pot să redau?
BmpDevice, PngDevice, JpegDevice și TiffDevice redau pagini individuale în BMP, PNG, JPEG și TIFF, respectiv.
Ce algoritmi de criptare sunt suportați?
CryptoAlgorithm oferă RC4x40, RC4x128, AESx128 și AESx256, transmise către Document::Encrypt().
Unde merg mai departe?
Ghidul pentru dezvoltatori include pagini dedicate pentru gestionarea documentelor și a paginilor, grafice și forme native PDF, adnotări și formulare interactive, precum și clasele de fațadă de nivel superior care învelesc operațiunile comune cu fișiere.
API Reference Rezumat
| Clasă/Metodă | Descriere: |
|---|---|
Document | Obiectul rădăcină — deschide, creează, salvează și optimizează un PDF |
Document.Pages() | Returnează PageCollection documentului |
Document.Encrypt() / Decrypt() | Protejați cu parolă sau eliminați protecția unui document |
Document.Form() | Returnează containerul AcroForm al documentului |
TextAbsorber | Extrage text simplu dintr-un document sau pagină |
TextFragmentAbsorber | Extrage fragmente de text poziționate |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Redă o pagină într-un format de imagine raster |
Resolution | DPI de ieșire transmis unui dispozitiv de redare |
CryptoAlgorithm | Selectarea algoritmului de criptare: RC4 sau AES, 40–256 biți |
Permissions | Indicatori de control al accesului transmiși către Encrypt() |
Annotation / AnnotationCollection | Tip de bază și container pentru adnotările de pagină |
TextAnnotation | Adnotare de tip notă text |
Form | Containerul de câmp AcroForm accesat prin Document.Form() |
TextBoxField | Câmp de formular text pe o singură linie/multilinie |