Aspose.PDF FOSS for C++ Fitur
Aspose.PDF FOSS untuk Fitur C++
Aspose.PDF FOSS for C++ adalah perpustakaan C++20 untuk membuat, membuka, memodifikasi, dan menyimpan dokumen PDF. Halaman ini meninjau area kemampuan utama dan kelas-kelas yang berfungsi sebagai titik masuknya. Setiap area dibahas secara mendalam pada halaman panduan pengembang masing-masing.
Manajemen Dokumen
Aspose::Pdf::Document adalah objek akar untuk setiap operasi. Ia membuka file yang ada dari sebuah jalur, menampilkan koleksi halaman melalui Pages(), dan menyimpan perubahan dengan Save(). Optimize() dan OptimizeResources() mengurangi ukuran file dengan menghapus sumber daya yang tidak terpakai atau duplikat.
#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");
}Ekstraksi Teks
Aspose::Pdf::Text::TextAbsorber menelusuri dokumen atau satu halaman dan mengumpulkan teks polos, yang dapat diambil dengan Text() setelah memanggil Visit(). TextFragmentAbsorber melakukan penelusuran yang sama tetapi mengembalikan objek TextFragment individu melalui TextFragments(), memberikan akses ke posisi setiap fragmen dan status teksnya.
#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";
}Rendering ke Gambar Raster
Perangkat perenderan halaman mengubah Page menjadi gambar raster. BmpDevice, PngDevice, JpegDevice, dan TiffDevice berbagi tanda tangan Process(page, output) yang sama dan dibangun dengan Resolution yang mengatur DPI keluaran.
#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);
}Enkripsi
Document::Encrypt() melindungi dokumen dengan kata sandi pengguna (diperlukan untuk membuka) dan kata sandi pemilik (diperlukan untuk mengubah izin), menggunakan algoritma yang dipilih dari enum CryptoAlgorithm: RC4x40, RC4x128, AESx128, atau AESx256. IsEncrypted() melaporkan status saat ini dan Decrypt() menghapus perlindungan dari dokumen yang sudah terbuka.
#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");
}Anotasi
Anotasi menempelkan catatan terlihat, bentuk, dan markup ke halaman. Setiap tipe anotasi diturunkan dari Annotation dan dibangun dengan Page target serta Rectangle penempatan, kemudian ditambahkan ke halaman melalui Anotasi() (sebuah 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
Bidang AcroForm dikelola melalui Aspose::Pdf::Forms::Form, dapat diakses melalui Document::Form(). Jenis bidang seperti TextBoxField dibangun seperti anotasi — dengan Page dan Rectangle — dan didaftarkan dengan 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");
}Tips dan Praktik Terbaik
- Buka file input dengan path menggunakan konstruktor
Document; panggilSave()dengan jalur output yang eksplisit alih-alih menimpa sumber sementara handle lain ke file tersebut masih terbuka. - Panggil
Optimize()sebelumSave()ketika sebuah dokumen telah banyak diedit — itu menghapus sumber daya yang tidak lagi dirujuk oleh halaman manapun. - Bangun perangkat raster (
BmpDevice,PngDevice,JpegDevice,TiffDevice) satu kali per resolusi dan gunakan kembali mereka di seluruh halaman alih-alih membuat perangkat baru untuk setiap halaman. - Tetapkan baik kata sandi pengguna maupun kata sandi pemilik saat memanggil
Encrypt()— kata sandi pengguna kosong memungkinkan siapa pun membuka file, sementara kata sandi pemilik mengontrol perubahan izin. - Pertahankan objek anotasi dan bidang (
TextAnnotation,TextBoxField, dan sejenisnya) tetap hidup hingga setelahSave()mengembalikan, karena dokumen menyimpan referensi ke konten halaman tempat mereka ditambahkan.
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
Save() menghasilkan file dengan konten yang tidak berubah | Pengeditan dilakukan pada salinan halaman atau anotasi, bukan pada objek yang diperoleh dari doc.Pages() | Modifikasi objek yang dikembalikan langsung oleh Pages(), Annotations(), atau Form() |
| Gambar yang dirender kosong atau putih | Indeks halaman yang salah diberikan ke Process() | PageCollection menggunakan indeks mulai dari 1 — halaman 1 adalah doc.Pages()[1], bukan [0] |
Encrypt() menghasilkan file yang tetap dapat dibuka tanpa kata sandi | Kata sandi pengguna dibiarkan kosong | Berikan string yang tidak kosong sebagai argumen userPassword |
| Teks yang diekstrak kosong untuk PDF yang dipindai | Halaman hanya berisi konten gambar raster, bukan operator teks | TextAbsorber membaca operator teks; halaman yang hanya berisi gambar tidak memiliki apa pun untuk diekstrak |
Bidang yang ditambahkan dengan Form::Add() tidak muncul di halaman | Field’s Rectangle berada di luar MediaBox halaman | Konfirmasi koordinat persegi panjang berada dalam batas Page::MediaBox() |
FAQ
Apakah Aspose.PDF FOSS untuk C++ bergantung pada perpustakaan PDF komersial apa pun?
Tidak. Ini adalah implementasi C++20 dari nol tanpa ketergantungan pada stack PDF komersial apa pun, dirilis di bawah lisensi MIT.
Apakah saya dapat membuat PDF baru dari nol alih-alih membuka yang sudah ada?
Ya. Document memiliki konstruktor default yang membuat dokumen kosong; panggil Pages().Add() untuk menambahkan halaman sebelum menyimpan.
Ke format raster apa saya dapat merender?
BmpDevice, PngDevice, JpegDevice, dan TiffDevice merender halaman individual ke BMP, PNG, JPEG, dan TIFF masing-masing.
Algoritma enkripsi apa yang didukung?
CryptoAlgorithm menawarkan RC4x40, RC4x128, AESx128, dan AESx256, yang diteruskan ke Document::Encrypt().
Ke mana saya harus pergi selanjutnya?
Panduan pengembang mencakup halaman khusus untuk manajemen dokumen dan halaman, grafik dan bentuk asli PDF, anotasi dan formulir interaktif, serta kelas facade tingkat tinggi yang membungkus operasi file umum.
API Reference Ringkasan
| Kelas/Metode | Deskripsi |
|---|---|
Document | Objek root — buka, buat, simpan, dan optimalkan PDF |
Document.Pages() | Mengembalikan PageCollection dokumen |
Document.Encrypt() / Decrypt() | Lindungi dokumen dengan kata sandi atau hapus perlindungan dari dokumen |
Document.Form() | Mengembalikan kontainer AcroForm dokumen |
TextAbsorber | Mengekstrak teks biasa dari dokumen atau halaman |
TextFragmentAbsorber | Mengekstrak fragmen teks yang diposisikan |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Merender halaman ke format gambar raster |
Resolution | DPI output yang diteruskan ke perangkat rendering |
CryptoAlgorithm | Pemilihan algoritma enkripsi: RC4 atau AES, 40–256 bit |
Permissions | Bendera kontrol akses yang diteruskan ke Encrypt() |
Annotation / AnnotationCollection | Tipe dasar dan wadah untuk anotasi halaman |
TextAnnotation | Anotasi catatan teks |
Form | Wadah bidang AcroForm dicapai melalui Document.Form() |
TextBoxField | Bidang formulir teks satu baris/banyak baris |