Aspose.PDF FOSS for C++ Funkce
Aspose.PDF FOSS pro C++ funkce
Aspose.PDF FOSS pro C++ je knihovna C++20 pro vytváření, otevírání, úpravu a ukládání PDF dokumentů. Tato stránka přehledně popisuje hlavní oblasti schopností a třídy, které slouží jako jejich vstupní body. Každá oblast je podrobně rozebrána na samostatné stránce vývojářské příručky.
Správa dokumentů
Aspose::Pdf::Document je kořenový objekt pro každou operaci. Otevírá existující soubor z cesty, zpřístupňuje kolekci stránek prostřednictvím Pages() a ukládá změny pomocí Save(). Optimize() a OptimizeResources() snižují velikost souboru odstraňováním nepoužívaných nebo duplicitních zdrojů.
#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");
}Extrahování textu
Aspose::Pdf::Text::TextAbsorber prochází dokument nebo jednotlivou stránku a sbírá prostý text, který je získán pomocí Text() po zavolání Visit(). TextFragmentAbsorber provádí stejný průchod, ale vrací jednotlivé objekty TextFragment prostřednictvím TextFragments(), což poskytuje přístup k pozici a stavu textu každého fragmentu.
#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";
}Renderování do rastrových obrázků
Zařízení pro vykreslování stránek převádějí Page na rastrový obraz. BmpDevice, PngDevice, JpegDevice a TiffDevice mají stejný Process(page, output) podpis a jsou konstruovány s Resolution, která nastavuje výstupní DPI.
#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);
}Šifrování
Document::Encrypt() chrání dokument uživatelským heslem (potřebným k jeho otevření) a heslem vlastníka (potřebným ke změně oprávnění), pomocí algoritmu vybraného z výčtu CryptoAlgorithm: RC4x40, RC4x128, AESx128 nebo AESx256. IsEncrypted() hlásí aktuální stav a Decrypt() odstraňuje ochranu již otevřeného 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");
}Anotace
Anotace připojují viditelné poznámky, tvary a značky na stránku. Každý typ anotace je odvozen od Annotation a je konstruován s cílovým Page a umístěním Rectangle, poté je přidán na stránku pomocí Anotace() (jedná se o 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
Pole AcroForm jsou spravována přes Aspose::Pdf::Forms::Form, přístupná přes Document::Form(). Typy polí, jako je TextBoxField, jsou konstruovány podobně jako anotace — s Page a Rectangle — a registrovány pomocí 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");
}Tipy a osvědčené postupy
- Otevřete vstupní soubory podle cesty pomocí konstruktoru
Document; zavolejteSave()s explicitní výstupní cestou místo přepsání zdroje, zatímco jiné handle k němu mohou být stále otevřeny. - Zavolejte
Optimize()předSave(), když byl dokument výrazně upraven — odstraňuje prostředky, které již nejsou žádnou stránkou odkazovány. - Vytvořte rastrová zařízení (
BmpDevice,PngDevice,JpegDevice,TiffDevice) jednou na rozlišení a znovu je použijte napříč stránkami místo vytváření zařízení pro každou stránku. - Při volání
Encrypt()nastavte jak uživatelské heslo, tak heslo vlastníka — prázdné uživatelské heslo umožní jakémukoli prohlížeči soubor otevřít, zatímco heslo vlastníka omezuje změny oprávnění. - Udržujte objekty anotací a polí (
TextAnnotation,TextBoxFielda podobně) naživu až do návratu zSave(), protože dokument uchovává odkazy na obsah stránky, ke které byly přidány.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
Save() vytváří soubor s nezměněným obsahem | Úpravy byly provedeny na kopii stránky nebo anotace místo objektu získaného z doc.Pages() | Upravte objekt vrácený přímo Pages(), Annotations() nebo Form() |
| Vykreslený obrázek je prázdný nebo prázdně bílý | Byl předán nesprávný index stránky do Process() | PageCollection je indexováno od jedné — stránka 1 je doc.Pages()[1], ne [0] |
Encrypt() vytváří soubor, který se stále otevírá bez hesla | Uživatelské heslo ponecháno prázdné | Předávejte neprázdný řetězec jako argument userPassword |
| Extrahovaný text je prázdný u naskenovaného PDF | Stránka obsahuje pouze rastrový obrázek, ne textové operátory | TextAbsorber čte textové operátory; stránky obsahující jen obrázky nemají žádné k extrakci |
Pole přidané pomocí Form::Add() se na stránce neobjeví | Pole Rectangle spadá mimo MediaBox stránky | Potvrďte, že souřadnice obdélníku jsou v mezích Page::MediaBox() |
FAQ
Závisí Aspose.PDF FOSS pro C++ na nějaké komerční PDF knihovně?
Ne. Jedná se o implementaci od nuly v C++20, která nevyžaduje žádnou komerční PDF knihovnu a je vydána pod licencí MIT.
Mohu vytvořit nový PDF dokument od nuly místo otevírání existujícího?
Ano. Document má výchozí konstruktor, který vytvoří prázdný dokument; zavolejte Pages().Add() pro přidání stránek před uložením.
Do jakých rastrových formátů mohu renderovat?
BmpDevice, PngDevice, JpegDevice a TiffDevice renderují jednotlivé stránky do BMP, PNG, JPEG a TIFF v uvedeném pořadí.
Jaké šifrovací algoritmy jsou podporovány?
CryptoAlgorithm nabízí RC4x40, RC4x128, AESx128 a AESx256, které jsou předány do Document::Encrypt().
Kam mám jít dál?
Průvodce vývojáře obsahuje vyhrazené stránky pro správu dokumentů a stránek, PDF-native grafiku a tvary, anotace a interaktivní formuláře a vyšší úrovně fasádních tříd, které zapouzdřují běžné operace se soubory.
API Reference Shrnutí
| Třída/Metoda | Popis: |
|---|---|
Document | Kořenový objekt — otevřít, vytvořit, uložit a optimalizovat PDF |
Document.Pages() | Vrací PageCollection dokumentu |
Document.Encrypt() / Decrypt() | Chránit dokument heslem nebo odebrat ochranu dokumentu |
Document.Form() | Vrací kontejner AcroForm dokumentu |
TextAbsorber | Extrahuje prostý text z dokumentu nebo stránky |
TextFragmentAbsorber | Extrahuje umístěné fragmenty textu |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Vykreslí stránku do rastrového formátu obrazu |
Resolution | Výstupní DPI předané vykreslovacímu zařízení |
CryptoAlgorithm | Výběr šifrovacího algoritmu: RC4 nebo AES, 40–256 bitů |
Permissions | Příznaky řízení přístupu předané Encrypt() |
Annotation / AnnotationCollection | Základní typ a kontejner pro anotace stránky |
TextAnnotation | Anotace textové poznámky |
Form | Kontejner pole AcroForm dosažený přes Document.Form() |
TextBoxField | Jednořádkové/víceřádkové textové pole formuláře |