परिचय
यह मार्गदर्शिका दिखाती है कि C++ के लिए Aspose.PDF FOSS में दस्तावेज़-स्तर की स्थिति को कैसे पढ़ा और अद्यतन किया जाए — PDF के वे भाग जो स्वयं दस्तावेज़ का वर्णन करते हैं, न कि उसके पृष्ठों पर खींची गई चीज़ें। Aspose.PDF FOSS for C++ Aspose::Pdf::Document क्लास पर केंद्रित है, जो फ़ाइल पथ से मौजूदा PDF को लोड करता है और इसे सामग्री संपादन और दस्तावेज़-स्तर के लेखा-जोखा दोनों के लिए उपलब्ध कराता है। दस्तावेज़-स्तर का लेखा-जोखा /Info शब्दकोश, XMP मेटाडाटा स्ट्रीम, व्यूअर के नेविगेशन पैनल में दिखाए जाने वाले बुकमार्क (outline) ट्री, आंतरिक लिंक द्वारा उपयोग किए जाने वाले नामित गंतव्य, PDF में एम्बेडेड फ़ाइल अटैचमेंट, और वह कस्टम पेज-नंबरिंग क्रमांक जो दस्तावेज़ परिभाषित कर सकता है, को शामिल करता है।
यह पोस्ट इन क्षेत्रों में से प्रत्येक के लिए API सतह का विवरण देती है: क्लासिक /Info शब्दकोश फ़ील्ड्स (title, author, creator, subject, keywords) के लिए DocumentInfo, XMP मेटाडेटा स्ट्रीम के लिए Metadata, बुकमार्क ट्री के लिए Outlines और OutlineItemCollection, नामित लिंक के लिए NamedDestinationCollection, संलग्नकों के लिए EmbeddedFileCollection और FileSpecification, तथा प्रति-रेंज पृष्ठ क्रमांकन के लिए PageLabelCollection। प्रत्येक अनुभाग संबंधित क्लास को एक कार्यशील उदाहरण के साथ जोड़ता है जो लोड किए गए Document वस्तु से निर्मित है।
Aspose.PDF FOSS for C++ MIT लाइसेंस के तहत जारी किया गया है और केवल C++ स्टैंडर्ड लाइब्रेरी के अलावा किसी चीज़ से लिंक नहीं करता, इसलिए यहाँ वर्णित प्रत्येक ऑपरेशन बिना किसी प्रोपायरेटरी PDF इंजन या थर्ड-पार्टी डिपेंडेंसी के चलता है। लाइब्रेरी CMake के माध्यम से जोड़े गए एक स्थैतिक टारगेट (aspose_pdf_foss) के रूप में बनती है।
क्या शामिल है
The /Info डिक्शनरी — DocumentInfo
Document.Info() PDF के /Info डिक्शनरी से बंधी एक DocumentInfo रेफ़रेंस लौटाता है। इसमें मानक फ़ील्ड्स के लिए टाइप्ड एक्सेसर्स होते हैं — Title(), Author(), Creator(), Subject(), Keywords(), Producer(), और Trapped() — प्रत्येक के साथ मिलते-जुलते सेटर्स होते हैं, साथ ही कस्टम कुंजियों के लिए एक सामान्य Add(key, value) / Remove(key) जोड़ी और IsPredefinedKey(key) जो यह जांचता है कि कुंजी नाम मानक फ़ील्ड्स में से एक है या नहीं। Document.SetTitle() एक शॉर्टकट है जो शीर्षक को सीधे दस्तावेज़ पर लिखता है।
#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 मेटाडाटा — Metadata
Document.Metadata() /Info डिक्शनरी के अलावा दस्तावेज़ के XMP मेटाडाटा स्ट्रीम पर एक Metadata ऑब्जेक्ट लौटाता है। यह एंट्रीज़ के एक एसोसिएटिव कंटेनर की तरह व्यवहार करता है: Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values(), और Count()। कस्टम नेमस्पेसेस को RegisterNamespaceUri(prefix, namespaceUri) के साथ पंजीकृत किया जाता है और GetNamespaceUriByPrefix() तथा 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");
}
बुकमार्क और रूपरेखा
Document.Outlines() दस्तावेज़ की OutlineCollection लौटाता है — बुकमार्क ट्री की जड़ जो दर्शक के नेविगेशन पैनल में दिखाई देती है। यह संग्रह Count(), Add(item), Clear(), Contains(item), Remove(item), Delete(), और एन्डपॉइंट एक्सेसर First() / Last() को समर्थन देता है, जो OutlineItemCollection नोड्स लौटाते हैं। प्रत्येक OutlineItemCollection नोड में Title(), Bold() / Italic() डिस्प्ले फ़्लैग, Open() विस्तार स्थिति, Destination() या Action(), और ट्रैवर्सल सदस्य Next(), Prev(), HasNext(), Level(), तथा Parent() होते हैं जो owning Outlines संग्रह की ओर वापस संकेत करते हैं।
#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";
}
}
नामित गंतव्य
Document.NamedDestinations() एक NamedDestinationCollection लौटाता है, जो एक लुकअप टेबल है जो एप्लिकेशन-परिभाषित नामों को दस्तावेज़ के भीतर के गंतव्यों से मैप करती है। नई प्रविष्टियों को Add(name, appointment) के साथ पंजीकृत किया जाता है, जहाँ appointment एक IAppointment इम्प्लीमेंटेशन है — वही इंटरफ़ेस जिसका उपयोग आउटलाइन-आइटम गंतव्यों और लिंक एक्शन्स में किया जाता है। मौजूदा प्रविष्टियों को Remove(name) के साथ हटाया जाता है, Count() से गिना जाता है, और 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";
}
}
एंबेडेड फ़ाइलें और संलग्नक
Document.EmbeddedFiles() एक EmbeddedFileCollection लौटाता है जिसमें FileSpecification अटैचमेंट्स PDF के भीतर होते हैं। फ़ाइलें Add(file) या Add(key, file) से जोड़ी जाती हैं, FindByName(name) द्वारा खोजी जाती हैं, Delete(name), DeleteByKey(key), या Delete() से हटाई जाती हैं, और Count() और Keys() के माध्यम से गिनी जाती हैं। प्रत्येक FileSpecification अपना Name(), Description(), MIMEType(), और AFRelationship() रिपोर्ट करता है — 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";
}
}
पृष्ठ लेबल
Document.PageLabels() एक PageLabelCollection लौटाता है जो कस्टम पेज-नंबरिंग क्रमों के लिए होता है, जिसे व्यूअर भौतिक पेज नंबरों के स्थान पर दिखाता है — उदाहरण के लिए, प्रीफ़ेस के लिए रोमन अंक और बॉडी के लिए अरबी अंक। GetLabel(pageIndex) किसी पेज के लिए प्रभावी PageLabel को प्राप्त करता है; PageLabel में StartingValue(), NumberingStyle() (एक Aspose::Pdf::NumberingStyle मान जैसे NumeralsArabic या NumeralsRomanLowercase), और Prefix() उपलब्ध होते हैं। UpdateLabel(pageIndex, pageLabel) उस पेज से शुरू होने वाला लेबल असाइन करता है, RemoveLabel(pageIndex) उसे हटाता है, और GetPages() प्रत्येक पेज इंडेक्स को सूचीबद्ध करता है जिसमें कस्टम लेबल होता है।
#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");
}
त्वरित प्रारंभ
लाइब्रेरी को CMake उपनिर्देशिका के रूप में जोड़ें और aspose_pdf_foss टारगेट के विरुद्ध लिंक करें:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
एक दस्तावेज़ खोलें, उसके /Info मेटाडेटा को पढ़ें और अपडेट करें, और परिणाम को सहेजें:
#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;
}
समर्थित स्वरूप
| फ़ॉर्मेट | एक्सटेंशन | पढ़ें | लिखें |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG, और TIFF उनके संबंधित डिवाइस क्लासों द्वारा उत्पन्न पेज-रेंडरिंग आउटपुट हैं, और टेक्स्ट TextAbsorber के माध्यम से निकाला जाता है। SVG को लाइब्रेरी के SVG लोड पाथ के माध्यम से वेक्टर कंटेंट के रूप में इम्पोर्ट किया जाता है। ऊपर उल्लेखित डॉक्यूमेंट-मैनेजमेंट प्रकारों में से कोई भी फॉर्मैट कन्वर्टर नहीं है — वे केवल PDF संरचना को पढ़ते और लिखते हैं।
ओपन सोर्स और लाइसेंसिंग
Aspose.PDF FOSS for C++ को MIT लाइसेंस के तहत वितरित किया गया है, पूरा स्रोत github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp पर उपलब्ध है। लाइसेंस व्यावसायिक उपयोग, संशोधन और पुनर्वितरण को बिना किसी अलग समझौते के अनुमति देता है।