Giới thiệu
Hướng dẫn này cho thấy cách đọc và cập nhật trạng thái cấp tài liệu trong Aspose.PDF FOSS cho C++ — các phần của PDF mô tả chính tài liệu thay vì những gì được vẽ trên các trang của nó. Aspose.PDF FOSS cho C++ tập trung vào lớp Aspose::Pdf::Document, lớp này tải một PDF hiện có từ đường dẫn tệp và cung cấp nó cho cả việc chỉnh sửa nội dung và quản lý cấp tài liệu. Quản lý cấp tài liệu bao gồm từ điển /Info, luồng siêu dữ liệu XMP, cây dấu trang (đề mục) hiển thị trong bảng điều hướng của trình xem, các đích được đặt tên được sử dụng bởi các liên kết nội bộ, các tệp đính kèm nhúng trong PDF, và các chuỗi đánh số trang tùy chỉnh mà tài liệu có thể định nghĩa.
Bài viết này hướng dẫn qua giao diện API cho từng lĩnh vực sau: DocumentInfo cho các trường từ điển /Info cổ điển (title, author, creator, subject, keywords), Metadata cho luồng metadata XMP, Outlines và OutlineItemCollection cho cây dấu trang, NamedDestinationCollection cho các liên kết có tên, EmbeddedFileCollection và FileSpecification cho tệp đính kèm, và PageLabelCollection cho việc đánh số trang theo phạm vi. Mỗi phần ghép lớp liên quan với một ví dụ hoạt động được xây dựng từ một đối tượng Document đã tải.
Aspose.PDF FOSS cho C++ được phát hành dưới giấy phép MIT và chỉ liên kết với thư viện chuẩn C++, vì vậy mọi thao tác được mô tả ở đây chạy mà không cần động cơ PDF sở hữu hoặc phụ thuộc của bên thứ ba. Thư viện được biên dịch thành mục tĩnh (aspose_pdf_foss) được thêm qua CMake.
Các thành phần bao gồm
Từ điển /Info — DocumentInfo
Document.Info() trả về một tham chiếu DocumentInfo được ràng buộc với từ điển /Info của PDF. Nó có các accessor có kiểu cho các trường chuẩn — Title(), Author(), Creator(), Subject(), Keywords(), Producer(), và Trapped() — mỗi cái có setter tương ứng, cộng với một cặp generic Add(key, value) / Remove(key) cho các khóa tùy chỉnh và IsPredefinedKey(key) để kiểm tra xem tên khóa có phải là một trong các trường chuẩn hay không. Document.SetTitle() là một shortcut ghi tiêu đề trực tiếp vào tài liệu.
#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");
}
Siêu dữ liệu XMP — Metadata
Ngoài từ điển /Info, Document.Metadata() trả về một đối tượng Metadata dựa trên luồng siêu dữ liệu XMP của tài liệu. Nó hoạt động như một container liên kết các mục: Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values(), và Count(). Các không gian tên tùy chỉnh được đăng ký bằng RegisterNamespaceUri(prefix, namespaceUri) và được giải quyết qua lại bằng GetNamespaceUriByPrefix() và 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");
}
Dấu trang và Đề cương
Document.Outlines() trả về OutlineCollection của tài liệu — gốc của cây bookmark được hiển thị trong bảng điều hướng của trình xem. Bộ sưu tập hỗ trợ Count(), Add(item), Clear(), Contains(item), Remove(item), Delete(), và các accessor cuối cùng First() / Last(), trả về các nút OutlineItemCollection. Mỗi nút OutlineItemCollection mang một Title(), cờ hiển thị Bold() / Italic(), trạng thái mở rộng Open(), một Destination() hoặc Action(), và các thành viên duyệt Next(), Prev(), HasNext(), Level(), và Parent() quay lại bộ sưu tập Outlines sở hữu.
#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";
}
}
Đích Đặt Tên
Document.NamedDestinations() trả về một NamedDestinationCollection, bảng tra cứu ánh xạ các tên do ứng dụng định nghĩa tới các điểm đến bên trong tài liệu. Các mục mới được đăng ký bằng Add(name, appointment), trong đó appointment là một triển khai của IAppointment — cùng một giao diện được sử dụng cho các điểm đến của mục outline và hành động liên kết. Các mục hiện có được xóa bằng Remove(name), đếm bằng Count(), và liệt kê bằng 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";
}
}
Tệp Nhúng và Tệp Đính Kèm
Document.EmbeddedFiles() trả về một EmbeddedFileCollection của các tệp FileSpecification được nhúng trong PDF. Các tệp được thêm bằng Add(file) hoặc Add(key, file), tra cứu bằng FindByName(name), xóa bằng Delete(name), DeleteByKey(key), hoặc Delete(), và liệt kê thông qua Count() và Keys(). Mỗi FileSpecification báo cáo Name(), Description(), MIMEType(), và AFRelationship() — phân loại quan hệ “Associated File” của 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";
}
}
Nhãn trang
Document.PageLabels() trả về một PageLabelCollection cho các dãy đánh số trang tùy chỉnh mà trình xem hiển thị thay cho số trang thực — ví dụ, số La Mã cho phần lời nói đầu và số Ả Rập cho phần nội dung. GetLabel(pageIndex) lấy PageLabel đang áp dụng cho một trang; PageLabel cung cấp StartingValue(), NumberingStyle() (một giá trị Aspose::Pdf::NumberingStyle như NumeralsArabic hoặc NumeralsRomanLowercase), và Prefix(). UpdateLabel(pageIndex, pageLabel) gán nhãn bắt đầu từ trang đó, RemoveLabel(pageIndex) xóa một nhãn, và GetPages() liệt kê mọi chỉ mục trang có nhãn tùy chỉnh.
#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");
}
Bắt đầu nhanh
Thêm thư viện như một thư mục con CMake và liên kết với mục tiêu aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Mở một tài liệu, đọc và cập nhật siêu dữ liệu /Info của nó, và lưu kết quả:
#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;
}
Định dạng được hỗ trợ
| Định dạng | Phần mở rộng | Đọc | Ghi |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG và TIFF là các đầu ra render trang được tạo ra bởi các lớp thiết bị tương ứng, và văn bản được trích xuất qua TextAbsorber. SVG được nhập dưới dạng nội dung vector thông qua đường dẫn tải SVG của thư viện. Không có loại quản lý tài liệu nào được đề cập ở trên là bộ chuyển đổi định dạng — chúng chỉ đọc và ghi cấu trúc PDF only.
Mã nguồn mở & Giấy phép
Aspose.PDF FOSS cho C++ được phân phối theo giấy phép MIT, với mã nguồn đầy đủ có sẵn tại github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Giấy phép cho phép sử dụng thương mại, sửa đổi và phân phối lại mà không cần thỏa thuận riêng.