הקדמה

מדריך זה מראה כיצד לקרוא ולעדכן מצב ברמת המסמך ב-Aspose.PDF FOSS עבור C++ — החלקים של קובץ PDF המתארים את המסמך עצמו ולא מה שמוצג בדפים שלו. Aspose.PDF FOSS עבור C++ מתמקדת במחלקה Aspose::Pdf::Document, הטוענת קובץ PDF קיים מנתיב קובץ ומחשפת אותו הן לעריכת תוכן והן לניהול ברמת המסמך. ניהול ברמת המסמך כולל את מילון /Info, זרם המטא-נתונים XMP, עץ הסימניות (מתווה) המופיע בפאנל הניווט של מציג, יעדים בשם המשמשים לקישורים פנימיים, קבצים מצורפים משובצים ב-PDF, והקבוצות המותאמות של מספור עמודים שהמסמך יכול להגדיר.

הפוסט הזה מוביל דרך ממשק API עבור כל אחד מהתחומים האלה: DocumentInfo עבור שדות מילון הקלאסי /Info (title, author, creator, subject, keywords), Metadata עבור זרם המטא-נתונים XMP, Outlines ו-OutlineItemCollection עבור עץ הסימניות, NamedDestinationCollection עבור קישורים בשם, EmbeddedFileCollection ו-FileSpecification עבור קבצים מצורפים, ו-PageLabelCollection עבור מספור עמודים לפי טווחים. כל סעיף משייך את המחלקה הרלוונטית לדוגמה עובדת שנבנתה מתוך אובייקט Document שטען.

Aspose.PDF FOSS עבור C++ משוחררת תחת רישיון MIT ומקושרת רק לספרייה הסטנדרטית של C++, ולכן כל פעולה המתוארת כאן פועלת ללא מנוע PDF קנייני או תלות צד שלישי. הספרייה נבנית כיעד סטטי (aspose_pdf_foss) שנוסף באמצעות CMake.


מה נכלל

המילון /InfoDocumentInfo

Document.Info() מחזירה הפנייה DocumentInfo הקשורה למילון /Info של ה-PDF. הוא מספק גישות טיפוסיות לשדות הסטנדרטיים — Title(), Author(), Creator(), Subject(), Keywords(), Producer(), ו-Trapped() — שלכל אחד מהם יש setter תואם, וכן זוג גנרי 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

מעבר למילון /Info, Document.Metadata() מחזירה אובייקט Metadata על פני זרם המטא-נתונים XMP של המסמך. הוא מתנהג כקונטיינר אסוציאטיבי של ערכים: 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() חזרה לאוסף 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 — אותה ממשק המשמש גם ליעדי פריטי קוֹטֶבּר (outline-item) ולפעולות קישורים. ערכים קיימים מוסרים בעזרת 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() — סיווג הקשר “Associated File” של ה-PDF.

#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 עבור C++ מופץ תחת רישיון MIT, עם הקוד המלא זמין ב-github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. הרישיון מאפשר שימוש מסחרי, שינוי והפצה מחדש ללא צורך בהסכם נפרד.


התחלה

משאבים קשורים