Giriş
Bu kılavuz, C++ için Aspose.PDF FOSS içinde belge-düzeyindeki durumu nasıl okuyup güncelleyeceğinizi gösterir — sayfalarında çizilen şeylerden ziyade belgeyi tanımlayan PDF bölümleri. C++ için Aspose.PDF FOSS, Aspose::Pdf::Document sınıfına odaklanır; bu sınıf bir dosya yolundan mevcut bir PDF’yi yükler ve içerik düzenleme ile belge-düzeyindeki muhasebe işlemleri için erişim sağlar. Belge-düzeyindeki muhasebe, /Info sözlüğü, XMP üst veri akışı, bir görüntüleyicinin gezinme panelinde gösterilen yer imi (outline) ağacı, iç bağlantılar tarafından kullanılan adlandırılmış hedefler, PDF’ye gömülü dosya ekleri ve bir belgenin tanımlayabileceği özel sayfa numaralandırma dizilerini kapsar.
Bu gönderi, bu alanların her biri için API yüzeyini adım adım inceler: klasik /Info sözlüğü alanları (başlık, yazar, oluşturucu, konu, anahtar kelimeler) için DocumentInfo, XMP üst veri akışı için Metadata, yer imi ağacı için Outlines ve OutlineItemCollection, adlandırılmış bağlantılar için NamedDestinationCollection, ekler için EmbeddedFileCollection ve FileSpecification, ve aralık-bazlı sayfa numaralandırma için PageLabelCollection. Her bölüm, ilgili sınıfı yüklenmiş bir Document nesnesi üzerinden oluşturulan çalışan bir örnekle eşleştirir.
Aspose.PDF FOSS for C++ MIT lisansı altında yayınlanmıştır ve yalnızca C++ standart kütüphanesine bağlanır, bu yüzden burada açıklanan her işlem, özel bir PDF motoru ya da üçüncü-taraf bağımlılığı olmadan çalışır. Kütüphane, CMake aracılığıyla eklenen statik bir hedef (aspose_pdf_foss) olarak derlenir.
Neler Dahildir
/Info Sözlüğü — DocumentInfo
Document.Info() PDF’nin /Info sözlüğüne bağlı bir DocumentInfo referansı döndürür. Standart alanlar için tiplenmiş erişimcileri vardır — Title(), Author(), Creator(), Subject(), Keywords(), Producer() ve Trapped() — her biri eşleşen bir ayarlayıcıya sahiptir; ayrıca özel anahtarlar için genel bir Add(key, value) / Remove(key) çifti ve bir anahtar adının standart alanlardan biri olup olmadığını kontrol eden IsPredefinedKey(key) bulunur. Document.SetTitle() başlığı doğrudan belgeye yazan bir kısayoldur.
#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");
}
XMP Üst Verisi — Metadata
/Info sözlüğünün ötesinde, Document.Metadata() belgenin XMP üst veri akışı üzerinde bir Metadata nesnesi döndürür. Girişlerin ilişkisel bir kapsayıcısı gibi davranır: Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values() ve Count(). Özel ad alanları RegisterNamespaceUri(prefix, namespaceUri) ile kaydedilir ve GetNamespaceUriByPrefix() ve GetPrefixByNamespaceUri() ile ileri-geri çözümlenir.
#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");
}
Yer İmleri ve Anahatlar
Document.Outlines() belge’nin OutlineCollection‘ını döndürür — görüntüleyicinin gezinme panelinde gösterilen yer imi ağacının kökü. Koleksiyon Count(), Add(item), Clear(), Contains(item), Remove(item), Delete() ve uç nokta erişimcileri First() / Last()‘ı destekler; bunlar OutlineItemCollection düğümlerini döndürür. Her OutlineItemCollection düğümü bir Title(), Bold() / Italic() görüntüleme bayrakları, bir Open() genişletme durumu, bir Destination() veya Action(), ve dolaşım üyeleri Next(), Prev(), HasNext(), Level() ve Parent()‘ı içerir; bu üyeler sahip Outlines koleksiyonuna geri döner.
#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";
}
}
Adlandırılmış Hedefler
Document.NamedDestinations() bir NamedDestinationCollection döndürür; bu, uygulama tarafından tanımlanan adları belge içindeki hedeflere eşleyen bir arama tablosudur. Yeni girişler Add(name, appointment) ile kaydedilir; burada appointment bir IAppointment uygulamasıdır — aynı arabirim outline-item hedefleri ve link eylemleri tarafından kullanılır. Mevcut girişler Remove(name) ile silinir, Count() ile sayılır ve Names() ile enumerate edilir.
#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";
}
}
Gömülü Dosyalar ve Ekler
Document.EmbeddedFiles() bir EmbeddedFileCollection döndürür; bu, PDF içinde taşınan FileSpecification eklerini içerir. Dosyalar Add(file) veya Add(key, file) ile eklenir, FindByName(name) ile bulunur, Delete(name), DeleteByKey(key) veya Delete() ile silinir ve Count() ve Keys() aracılığıyla enumerate edilir. Her FileSpecification kendi Name(), Description(), MIMEType() ve AFRelationship()‘ini rapor eder — PDF “Associated File” ilişki sınıflandırması.
#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";
}
}
Sayfa Etiketleri
Document.PageLabels() bir PageLabelCollection döndürür; bu, bir görüntüleyicinin fiziksel sayfa numaraları yerine gösterdiği özel sayfa numaralandırma dizilerini tutar — örneğin, önsöz için Roma rakamları, gövde için Arap rakamları. GetLabel(pageIndex) bir sayfa için geçerli PageLabel‘ı alır; PageLabel StartingValue(), NumberingStyle() (bir Aspose::Pdf::NumberingStyle değeri, ör. NumeralsArabic veya NumeralsRomanLowercase) ve Prefix() sunar. UpdateLabel(pageIndex, pageLabel) o sayfada başlayan bir etiket atar, RemoveLabel(pageIndex) birini siler ve GetPages() özel etiket taşıyan her sayfa indeksini listeler.
#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");
}
Hızlı Başlangıç
Kütüphaneyi bir CMake alt dizini olarak ekleyin ve aspose_pdf_foss hedefine bağlayın:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Bir belge açın, /Info üst verilerini okuyun ve güncelleyin, ardından sonucu kaydedin:
#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;
}
Desteklenen Biçimler
| Biçim | Uzantı | Oku | Yaz |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG ve TIFF, ilgili cihaz sınıfları tarafından üretilen sayfa renderleme çıktılarıdır ve metin TextAbsorber aracılığıyla çıkarılır. SVG, kütüphanenin SVG yükleme yolu üzerinden vektör içerik olarak içe aktarılır. Yukarıda ele alınan belge-yönetim türlerinin hiçbiri format dönüştürücü değildir — yalnızca PDF yapısını okur ve yazar.
Açık Kaynak & Lisanslama
Aspose.PDF FOSS for C++ MIT lisansı altında dağıtılmaktadır, tam kaynak github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp adresinde mevcuttur. Lisans, ayrı bir anlaşma olmaksızın ticari kullanım, değişiklik ve yeniden dağıtımına izin verir.