Pendahuluan
Panduan ini menunjukkan cara membaca dan memperbarui status tingkat dokumen di Aspose.PDF FOSS untuk C++ — bagian-bagian PDF yang menggambarkan dokumen itu sendiri bukan apa yang digambar di halamannya. Aspose.PDF FOSS untuk C++ berfokus pada kelas Aspose::Pdf::Document, yang memuat PDF yang ada dari jalur file dan membuatnya dapat diedit baik kontennya maupun pembukuan tingkat dokumen. Pembukuan tingkat dokumen mencakup kamus /Info, aliran metadata XMP, pohon bookmark (outline) yang ditampilkan di panel navigasi penampil, tujuan bernama yang digunakan oleh tautan internal, lampiran file yang disematkan dalam PDF, dan urutan penomoran halaman khusus yang dapat didefinisikan dokumen.
Posting ini menelusuri permukaan API untuk masing-masing area berikut: DocumentInfo untuk bidang kamus klasik /Info (title, author, creator, subject, keywords), Metadata untuk aliran metadata XMP, Outlines dan OutlineItemCollection untuk pohon bookmark, NamedDestinationCollection untuk tautan bernama, EmbeddedFileCollection dan FileSpecification untuk lampiran, serta PageLabelCollection untuk penomoran halaman per rentang. Setiap bagian memadukan kelas yang relevan dengan contoh kerja yang dibangun dari objek Document yang telah dimuat.
Aspose.PDF FOSS untuk C++ dirilis di bawah lisensi MIT dan hanya terhubung dengan pustaka standar C++, sehingga setiap operasi yang dijelaskan di sini dijalankan tanpa mesin PDF proprietari atau ketergantungan pihak ketiga. Pustaka ini dibangun sebagai target statis (aspose_pdf_foss) yang ditambahkan melalui CMake.
Apa yang Termasuk
Dictionary /Info — DocumentInfo
Document.Info() mengembalikan referensi DocumentInfo yang terikat pada kamus /Info PDF. Ia memiliki accessor bertipe untuk bidang standar — Title(), Author(), Creator(), Subject(), Keywords(), Producer(), dan Trapped() — masing-masing dengan setter yang sesuai, serta pasangan umum Add(key, value) / Remove(key) untuk kunci kustom dan IsPredefinedKey(key) untuk memeriksa apakah nama kunci termasuk dalam bidang standar. Document.SetTitle() adalah pintasan yang menulis judul langsung ke dokumen.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/document_info.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& info = doc.Info();
std::cout << "Title: " << info.Title() << "\n";
std::cout << "Author: " << info.Author() << "\n";
info.Author("Demo author");
info.Creator("Aspose.PDF FOSS C++");
info.Add("Generated-By", "document-management sample");
doc.Save("output.pdf");
}
Metadata XMP — Metadata
Di luar kamus /Info, Document.Metadata() mengembalikan objek Metadata yang meliputi aliran metadata XMP dokumen. Objek ini berperilaku seperti kontainer asosiatif dari entri: Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values(), dan Count(). Namespace kustom didaftarkan dengan RegisterNamespaceUri(prefix, namespaceUri) dan dapat diubah bolak-balik dengan GetNamespaceUriByPrefix() serta GetPrefixByNamespaceUri().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/metadata.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& metadata = doc.Metadata();
metadata.RegisterNamespaceUri("myapp", "http://example.com/myapp/1.0/");
metadata.Add("myapp:BatchId", "2026-07-run-42");
std::cout << "XMP entries: " << metadata.Count() << "\n";
doc.Save("output.pdf");
}
Penanda Buku dan Outline
Document.Outlines() mengembalikan OutlineCollection dokumen — akar dari pohon bookmark yang ditampilkan di panel navigasi penampil. Koleksi ini mendukung Count(), Add(item), Clear(), Contains(item), Remove(item), Delete(), dan accessor ujung First() / Last(), yang mengembalikan node OutlineItemCollection. Setiap node OutlineItemCollection memiliki Title(), flag tampilan Bold() / Italic(), status perluasan Open(), sebuah Destination() atau Action(), serta anggota penelusuran Next(), Prev(), HasNext(), Level(), dan Parent() kembali ke koleksi Outlines yang memilikinya.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/outlines.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& outlines = doc.Outlines();
std::cout << "Top-level bookmarks: " << outlines.Count() << "\n";
if (outlines.Count() > 0) {
auto& first = outlines.First();
std::cout << "First bookmark: " << first.Title()
<< " (level " << first.Level() << ")\n";
}
}
Tujuan Bernama
Document.NamedDestinations() mengembalikan NamedDestinationCollection, sebuah tabel pencarian yang memetakan nama yang ditentukan aplikasi ke tujuan di dalam dokumen. Entri baru didaftarkan dengan Add(name, appointment), di mana appointment adalah implementasi IAppointment — antarmuka yang sama digunakan oleh tujuan item outline dan aksi tautan. Entri yang ada dihapus dengan Remove(name), dihitung dengan Count(), dan dienumerasi dengan Names().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/named_destination_collection.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& destinations = doc.NamedDestinations();
std::cout << "Named destinations: " << destinations.Count() << "\n";
for (const auto& name : destinations.Names()) {
std::cout << " " << name << "\n";
}
}
Berkas Tertanam dan Lampiran
Document.EmbeddedFiles() mengembalikan EmbeddedFileCollection berisi lampiran FileSpecification yang dibawa di dalam PDF. File ditambahkan dengan Add(file) atau Add(key, file), dicari dengan FindByName(name), dihapus dengan Delete(name), DeleteByKey(key), atau Delete(), dan dienumerasi melalui Count() dan Keys(). Setiap FileSpecification melaporkan Name(), Description(), MIMEType(), dan AFRelationship() — klasifikasi hubungan PDF “Associated File”.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/file_specification.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& files = doc.EmbeddedFiles();
std::cout << "Embedded files: " << files.Count() << "\n";
for (const auto& key : files.Keys()) {
auto spec = files.FindByName(key);
std::cout << " " << spec.Name() << " (" << spec.MIMEType() << ")\n";
}
}
Label Halaman
Document.PageLabels() mengembalikan PageLabelCollection untuk urutan penomoran halaman khusus yang ditampilkan penampil menggantikan nomor halaman fisik — misalnya, angka Romawi untuk pendahuluan diikuti angka Arab untuk isi. GetLabel(pageIndex) mengambil PageLabel yang berlaku untuk sebuah halaman; PageLabel menyediakan StartingValue(), NumberingStyle() (nilai Aspose::Pdf::NumberingStyle seperti NumeralsArabic atau NumeralsRomanLowercase), dan Prefix(). UpdateLabel(pageIndex, pageLabel) menetapkan label mulai pada halaman tersebut, RemoveLabel(pageIndex) menghapusnya, dan GetPages() menampilkan setiap indeks halaman yang memiliki label khusus.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/page_label.hpp>
#include <aspose/pdf/page_label_collection.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& labels = doc.PageLabels();
for (int pageIndex : labels.GetPages()) {
auto label = labels.GetLabel(pageIndex);
std::cout << "Page " << pageIndex << " prefix: " << label.Prefix()
<< ", starts at " << label.StartingValue() << "\n";
}
auto preface = labels.GetLabel(1);
preface.NumberingStyle(Aspose::Pdf::NumberingStyle::NumeralsRomanLowercase);
preface.StartingValue(1);
labels.UpdateLabel(1, preface);
doc.Save("output.pdf");
}
Mulai Cepat
Tambahkan pustaka sebagai subdirektori CMake dan tautkan terhadap target aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Buka sebuah dokumen, baca dan perbarui metadata /Info-nya, lalu simpan hasilnya:
#include <aspose/pdf/document.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& info = doc.Info();
std::cout << "Title: " << info.Title() << "\n";
std::cout << "Author: " << info.Author() << "\n";
doc.SetTitle("Updated Report Title");
info.Author("Report Generator");
info.Add("Generated-By", "Aspose.PDF FOSS for C++");
doc.Save("output.pdf");
return 0;
}
Format yang Didukung
| Format | Ekstensi | Baca | Tulis |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG, dan TIFF adalah output perenderan halaman yang dihasilkan oleh kelas perangkat masing-masing, dan teks diekstrak melalui TextAbsorber. SVG diimpor sebagai konten vektor melalui jalur pemuatan SVG perpustakaan. Tidak ada tipe manajemen dokumen yang disebutkan di atas yang berfungsi sebagai konverter format — mereka hanya membaca dan menulis struktur PDF saja.
Sumber Terbuka & Lisensi
Aspose.PDF FOSS untuk C++ didistribusikan di bawah lisensi MIT, dengan sumber lengkap tersedia di github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Lisensi tersebut memperbolehkan penggunaan komersial, modifikasi, dan redistribusi tanpa perjanjian terpisah.