บทนำ

คู่มือฉบับนี้อธิบายวิธีการอ่านและอัปเดตสถานะระดับเอกสารใน Aspose.PDF FOSS สำหรับ C++ — ส่วนของ PDF ที่อธิบายเอกสารเองแทนที่จะเป็นสิ่งที่ถูกวาดบนหน้าต่าง ๆ Aspose.PDF FOSS สำหรับ C++ มุ่งเน้นที่คลาส Aspose::Pdf::Document ซึ่งโหลด PDF ที่มีอยู่จากเส้นทางไฟล์และทำให้สามารถแก้ไขเนื้อหาและทำการบันทึกข้อมูลระดับเอกสารได้ การบันทึกระดับเอกสารรวมถึงพจนานุกรม /Info , สตรีมเมตาดาต้า XMP, ต้นไม้บุ๊กมาร์ค (outline) ที่แสดงในแผงนำทางของโปรแกรมอ่าน, ปลายทางที่ตั้งชื่อซึ่งใช้ในลิงก์ภายใน, ไฟล์แนบที่ฝังอยู่ใน 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() — แต่ละฟังก์ชันมีตัวตั้งค่าแบบตรงคู่กัน รวมถึงคู่เมธอดทั่วไป 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 — อินเทอร์เฟซเดียวกันที่ใช้โดยปลายทางของรายการโครงร่างและการกระทำลิงก์ รายการที่มีอยู่จะถูกลบด้วย 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");
}

เริ่มต้นอย่างเร็ว

เพิ่มไลบรารีเป็น subdirectory ของ CMake และลิงก์กับ target 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. ใบอนุญาตอนุญาตให้ใช้ในเชิงพาณิชย์, แก้ไข, และแจกจ่ายต่อได้โดยไม่มีข้อตกลงแยกต่างหาก.


เริ่มต้น

แหล่งข้อมูลที่เกี่ยวข้อง