Funkcje Aspose.PDF FOSS for C++
Aspose.PDF FOSS dla C++ Funkcje
Aspose.PDF FOSS for C++ jest biblioteką C++20 do tworzenia, otwierania, modyfikowania i zapisywania dokumentów PDF. Ta strona przegląda główne obszary funkcjonalności oraz klasy, które służą jako ich punkty wejścia. Każdy obszar jest szczegółowo opisany na oddzielnej stronie przewodnika dewelopera.
Zarządzanie dokumentami
Aspose::Pdf::Document jest obiektem głównym dla każdej operacji. Otwiera istniejący plik z podanej ścieżki, udostępnia kolekcję stron poprzez Pages() i zapisuje zmiany za pomocą Save(). Optimize() i OptimizeResources() zmniejszają rozmiar pliku, usuwając nieużywane lub zduplikowane zasoby.
#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");
}Ekstrakcja tekstu
Aspose::Pdf::Text::TextAbsorber przegląda dokument lub pojedynczą stronę i zbiera zwykły tekst, który jest pobierany za pomocą Text() po wywołaniu Visit(). TextFragmentAbsorber wykonuje ten sam przegląd, ale zwraca poszczególne obiekty TextFragment poprzez TextFragments(), zapewniając dostęp do pozycji każdego fragmentu oraz stanu tekstu.
#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";
}Renderowanie do obrazów rastrowych
Urządzenia renderujące stronę konwertują Page na obraz rastrowy. BmpDevice, PngDevice, JpegDevice i TiffDevice mają tę samą sygnaturę Process(page, output) i są konstruowane z Resolution, który ustawia DPI wyjścia.
#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);
}Szyfrowanie
Document::Encrypt() chroni dokument hasłem użytkownika (wymaganym do otwarcia) oraz hasłem właściciela (wymaganym do zmiany uprawnień), używając algorytmu wybranego z wyliczenia CryptoAlgorithm: RC4x40, RC4x128, AESx128 lub AESx256. IsEncrypted() zgłasza aktualny stan, a Decrypt() usuwa ochronę z już otwartego dokumentu.
#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");
}Adnotacje
Adnotacje dołączają widoczne notatki, kształty i oznaczenia do strony. Każdy typ adnotacji dziedziczy po Annotation i jest konstruowany z docelowym Page oraz Rectangle położenia, po czym jest dodawany do strony za pomocą Adnotacje() (jest to 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
Pola AcroForm są zarządzane przez Aspose::Pdf::Forms::Form, dostępne poprzez Document::Form(). Typy pól, takie jak TextBoxField, są konstruowane jak adnotacje — z Page i Rectangle — i rejestrowane w 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");
}Wskazówki i najlepsze praktyki
- Otwórz pliki wejściowe podając ścieżkę przy użyciu konstruktora
Document; wywołajSave()z wyraźną ścieżką wyjściową zamiast nadpisywać źródło, gdy inne uchwyty do niego mogą nadal być otwarte. - Wywołaj
Optimize()przedSave(), gdy dokument został intensywnie edytowany — usuwa zasoby, które nie są już referencjonowane przez żadną stronę. - Utwórz urządzenia rastrowe (
BmpDevice,PngDevice,JpegDevice,TiffDevice) raz na rozdzielczość i używaj ich ponownie na różnych stronach, zamiast tworzyć nowe urządzenie na każdą stronę. - Ustaw zarówno hasło użytkownika, jak i hasło właściciela przy wywoływaniu
Encrypt()— puste hasło użytkownika pozwala każdemu podglądającemu otworzyć plik, podczas gdy hasło właściciela kontroluje zmiany uprawnień. - Utrzymuj obiekty adnotacji i pól (
TextAnnotation,TextBoxFieldi podobne) w życiu aż do momentu powrotu zSave(), ponieważ dokument przechowuje odwołania do zawartości strony, do której zostały dodane.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
Save() tworzy plik z niezmienioną zawartością | Dokonano edycji kopii strony lub adnotacji zamiast obiektu uzyskanego z doc.Pages() | Modyfikuj obiekt zwrócony bezpośrednio przez Pages(), Annotations() lub Form() |
| Renderowany obraz jest pusty lub biały | Przekazano nieprawidłowy indeks strony do Process() | PageCollection jest indeksowane od 1 — strona 1 to doc.Pages()[1], a nie [0] |
Encrypt() tworzy plik, który nadal otwiera się bez hasła | Hasło użytkownika pozostawiono puste | Podaj niepusty ciąg jako argument userPassword |
| Wyodrębniony tekst jest pusty dla zeskanowanego PDF | Strona zawiera tylko zawartość obrazu rastrowego, a nie operatory tekstowe | TextAbsorber odczytuje operatory tekstowe; strony zawierające wyłącznie obrazy nie mają ich do wyodrębnienia |
Pole dodane za pomocą Form::Add() nie pojawia się na stronie | Pole Rectangle znajduje się poza MediaBox strony | Potwierdź, że współrzędne prostokąta znajdują się w granicach Page::MediaBox() |
FAQ
Czy Aspose.PDF FOSS dla C++ zależy od jakiejkolwiek komercyjnej biblioteki PDF?
Nie. Jest to implementacja od podstaw w C++20, bez zależności od jakiegokolwiek komercyjnego stosu PDF, wydana na licencji MIT.
Czy mogę stworzyć nowy PDF od podstaw zamiast otwierać istniejący?
Tak. Document posiada konstruktor domyślny, który tworzy pusty dokument; wywołaj Pages().Add(), aby dodać strony przed zapisaniem.
Do jakich formatów rastrowych mogę renderować?
BmpDevice, PngDevice, JpegDevice i TiffDevice renderują poszczególne strony do BMP, PNG, JPEG i TIFF odpowiednio.
Jakie algorytmy szyfrowania są obsługiwane?
CryptoAlgorithm oferuje RC4x40, RC4x128, AESx128 i AESx256, przekazywane do Document::Encrypt().
Gdzie mam iść dalej?
Przewodnik programisty zawiera dedykowane strony dotyczące zarządzania dokumentami i stronami, natywnych grafik i kształtów PDF, adnotacji i interaktywnych formularzy oraz klas fasady wyższego poziomu, które opakowują typowe operacje na plikach.
API Reference Podsumowanie
| Klasa/Metoda | Opis |
|---|---|
Document | Obiekt główny — otwórz, utwórz, zapisz i optymalizuj plik PDF |
Document.Pages() | Zwraca PageCollection dokumentu |
Document.Encrypt() / Decrypt() | Zabezpiecz dokument hasłem lub usuń ochronę dokumentu |
Document.Form() | Zwraca kontener AcroForm dokumentu |
TextAbsorber | Wyodrębnia zwykły tekst z dokumentu lub strony |
TextFragmentAbsorber | Wyodrębnia pozycjonowane fragmenty tekstu |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Renderuje stronę do formatu obrazu rastrowego |
Resolution | Rozdzielczość DPI przekazywana do urządzenia renderującego |
CryptoAlgorithm | Wybór algorytmu szyfrowania: RC4 lub AES, 40–256 bit |
Permissions | Flagi kontroli dostępu przekazywane do Encrypt() |
Annotation / AnnotationCollection | Podstawowy typ i kontener dla adnotacji na stronie |
TextAnnotation | Adnotacja notatki tekstowej |
Form | Kontener pola AcroForm osiągnięty przez Document.Form() |
TextBoxField | Pole formularza tekstowego jednowierszowego/wielowierszowego |