Funkcje Aspose.PDF FOSS for C++

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łaj Save() z wyraźną ścieżką wyjściową zamiast nadpisywać źródło, gdy inne uchwyty do niego mogą nadal być otwarte.
  • Wywołaj Optimize() przed Save(), 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, TextBoxField i podobne) w życiu aż do momentu powrotu z Save(), ponieważ dokument przechowuje odwołania do zawartości strony, do której zostały dodane.

Typowe problemy

ProblemPrzyczynaNaprawa
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łyPrzekazano 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łaHasło użytkownika pozostawiono pustePodaj niepusty ciąg jako argument userPassword
Wyodrębniony tekst jest pusty dla zeskanowanego PDFStrona zawiera tylko zawartość obrazu rastrowego, a nie operatory tekstoweTextAbsorber 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 stroniePole Rectangle znajduje się poza MediaBox stronyPotwierdź, ż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/MetodaOpis
DocumentObiekt 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
TextAbsorberWyodrębnia zwykły tekst z dokumentu lub strony
TextFragmentAbsorberWyodrębnia pozycjonowane fragmenty tekstu
BmpDevice / PngDevice / JpegDevice / TiffDeviceRenderuje stronę do formatu obrazu rastrowego
ResolutionRozdzielczość DPI przekazywana do urządzenia renderującego
CryptoAlgorithmWybór algorytmu szyfrowania: RC4 lub AES, 40–256 bit
PermissionsFlagi kontroli dostępu przekazywane do Encrypt()
Annotation / AnnotationCollectionPodstawowy typ i kontener dla adnotacji na stronie
TextAnnotationAdnotacja notatki tekstowej
FormKontener pola AcroForm osiągnięty przez Document.Form()
TextBoxFieldPole formularza tekstowego jednowierszowego/wielowierszowego

Zobacz także

 Polski