Giới thiệu

Các chú thích PDF bao gồm một loạt các yếu tố tương tác và trực quan được xếp lớp trên nội dung trang: ghi chú dán văn bản, siêu liên kết, văn bản được tô sáng hoặc gạch ngang, các hình dạng hình học, nét mực, tệp đính kèm và con dấu phê duyệt. Aspose.PDF FOSS cho C++ đại diện cho mỗi yếu tố này như một lớp con cụ thể của Annotation, vì vậy mã duyệt qua các chú thích của một trang có thể hoạt động một cách tổng quát với lớp cơ sở trong khi vẫn có thể truy cập các thành viên đặc thù của từng loại — chẳng hạn như Icon() trên TextAnnotation hoặc Action() trên LinkAnnotation — khi cần.

Thư viện Annotations::AnnotationType enum liệt kê các loại phụ mà nó nhận dạng: Text, Link, FreeText, Line, Square, Circle, Polygon, PolyLine, Highlight, Underline, Squiggly, StrikeOut, Stamp, Caret, Ink, Popup, FileAttachment, Sound, Movie, Widget, Screen, PrinterMark, Watermark, Redaction, RichMedia, và một số khác. Mỗi giá trị ánh xạ tới một lớp cụ thể — CircleAnnotation, SquareAnnotation, PolygonAnnotation, PolylineAnnotation, và LineAnnotation cho đánh dấu hình dạng; FreeTextAnnotationInkAnnotation cho văn bản tự do và nét vẽ; FileAttachmentAnnotation, SoundAnnotation, MovieAnnotation, ScreenAnnotation, và RichMediaAnnotation cho nội dung nhúng; và WidgetAnnotation cho hiển thị trường AcroForm.

Bài viết này bao phủ API cơ sở AnnotationAnnotationCollection, thêm ghi chú văn bản và liên kết, phát hiện loại chú thích khi tải tài liệu hiện có, và đọc hoặc cập nhật siêu dữ liệu đánh dấu và con dấu. Aspose.PDF FOSS cho C++ là một thư viện C++20 không có phụ thuộc thời gian chạy ngoài thư viện chuẩn; các tiêu đề được bao gồm trực tiếp từ thư mục aspose/pdf/annotations/ và thư viện được biên dịch như một mục tiêu CMake.


Nội dung bao gồm

Annotation và AnnotationCollection

Annotation là lớp cơ sở cho mọi loại chú thích phụ. Nó cung cấp các thuộc tính chung: Rect() / Rect(value) cho hình chữ nhật bao quanh của chú thích, Contents() cho văn bản liên quan, Name(), Color(), Flags() (một mặt nạ bit AnnotationFlagsPrint, Hidden, Invisible, NoZoom, ReadOnly, và các mục khác), Border(), Width() / Height(), AnnotationType(), và PageIndex(). AnnotationCollection chứa các chú thích trên một trang duy nhất và được truy cập thông qua Page.Annotations().

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/annotation_collection.hpp>
#include <iostream>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

Document doc("reviewed.pdf");
AnnotationCollection& annots = doc.Pages()[1].Annotations();

std::cout << "Annotation count: " << annots.Count() << "\n";
for (int i = 0; i < annots.Count(); ++i) {
    Annotation& a = annots[i];
    std::cout << "  " << a.Name() << ": " << a.Contents() << "\n";
}

AnnotationCollection cũng cung cấp các phương thức Add(annotation), Add(annotation, considerRotation), Delete(index), Delete(annotation), Clear(), Remove(annotation), Contains(annotation), và IsReadOnly().

Ghi chú Văn bản với TextAnnotation

TextAnnotation đại diện cho chú thích dạng ghi chú dán quen thuộc. Ngoài các thành viên cơ sở Annotation, nó thêm Open() / Open(value) để điều khiển việc ghi chú có hiển thị mở rộng hay không, và Icon() / Icon(value) (một giá trị TextIcon như Note, Comment, Key, Help, hoặc Check) để chọn biểu tượng.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

Document doc("input.pdf");

TextAnnotation note{doc};
note.Rect(Rectangle{100.0, 700.0, 200.0, 720.0, false});
note.Contents("Reviewed by QA");
note.Icon(TextIcon::Comment);
note.Open(true);

doc.Pages()[1].Annotations().Add(note);
doc.Save("annotated.pdf");

Liên kết và Hành động với LinkAnnotation

LinkAnnotation gắn một vùng có thể nhấp vào vào một trang. Nó được tạo từ Page sở hữu và một Rectangle, và hành vi của nó được đặt bằng Action(value) — bất kỳ lớp con nào của PdfAction, bao gồm NamedAction (điều hướng định trước như PredefinedAction::LastPage), GoToAction, GoToURIAction, hoặc JavascriptAction. Destination() đọc mục tiêu IAppointment của liên kết, và Highlighting() / Highlighting(value) đặt HighlightingMode (None, Invert, Outline, Push, Toggle) được áp dụng khi liên kết được kích hoạt.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/link_annotation.hpp>
#include <aspose/pdf/annotations/named_action.hpp>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

Document doc;
Page page = doc.Pages().Add();

LinkAnnotation link{page, Rectangle{0.0, 0.0, 100.0, 20.0, false}};
link.Action(NamedAction{PredefinedAction::LastPage});
link.Highlighting(HighlightingMode::Push);

page.Annotations().Add(link);

Phát hiện các loại Annotation khi tải

Khi một tài liệu được mở, các chú thích hiện có đã được điền sẵn trong AnnotationCollection của mỗi trang, và AnnotationType() xác định kiểu con cụ thể nào mà mỗi mục đại diện. Điều này cho phép mã gọi nhánh dựa trên giá trị enum mà không cần biết trước các loại chú thích mà một PDF nhất định chứa.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/annotation_type.hpp>
#include <iostream>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

Document doc("mixed-annotations.pdf");
auto& annots = doc.Pages()[1].Annotations();

for (int i = 0; i < annots.Count(); ++i) {
    switch (annots[i].AnnotationType()) {
        case AnnotationType::Text:      std::cout << "Text note\n"; break;
        case AnnotationType::Link:      std::cout << "Link\n"; break;
        case AnnotationType::Circle:    std::cout << "Circle shape\n"; break;
        case AnnotationType::Square:    std::cout << "Square shape\n"; break;
        case AnnotationType::Highlight: std::cout << "Highlight\n"; break;
        case AnnotationType::Stamp:     std::cout << "Stamp\n"; break;
        default: break;
    }
}

Siêu dữ liệu Annotation Đánh dấu

MarkupAnnotation là cơ sở cho các chú thích mang siêu dữ liệu người đánh giá: Title() (tác giả), Subject(), RichText() cho văn bản bình luận định dạng, và Opacity() để pha trộn với nội dung trang. InReplyTo()Popup() kết nối một chú thích đánh dấu với chuỗi bình luận mà nó thuộc về, và ClearState() / SetReviewState(state, userName) quản lý trạng thái đánh giá của nó. HighlightAnnotation, UnderlineAnnotation, StrikeOutAnnotation, và SquigglyAnnotation là các kiểu phụ của markup được đặt lên trên văn bản; cơ sở chung TextMarkupAnnotation của chúng thêm QuadPoints() để định nghĩa các vùng tứ giác được bao phủ và GetMarkedText() để đọc lại văn bản bên dưới.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/markup_annotation.hpp>

using namespace Aspose::Pdf::Annotations;

for (int i = 0; i < annots.Count(); ++i) {
    if (auto* markup = dynamic_cast<MarkupAnnotation*>(&annots[i])) {
        markup->Title("QA Reviewer");
        markup->Subject("Layout issue");
        markup->Opacity(0.6);
    }
}

Chú thích dấu bằng StampAnnotation

StampAnnotation đặt một con dấu đã định trước hoặc tùy chỉnh lên một trang. Icon() / Icon(value) chọn một giá trị StampIconApproved, Draft, Confidential, Final, Expired, NotApproved, ForComment, TopSecret, và các giá trị khác — và Image() / Image(value) cung cấp byte ảnh thô cho giao diện con dấu tùy chỉnh thay vì biểu tượng tích hợp.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/stamp_annotation.hpp>

using namespace Aspose::Pdf::Annotations;

for (int i = 0; i < annots.Count(); ++i) {
    if (auto* stamp = dynamic_cast<StampAnnotation*>(&annots[i])) {
        stamp->Icon(StampIcon::Approved);
    }
}

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, thêm ghi chú văn bản, và đọc lại số lượng chú thích:

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>
#include <iostream>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

int main() {
    Document doc("input.pdf");

    TextAnnotation note{doc};
    note.Rect(Rectangle{100.0, 700.0, 200.0, 720.0, false});
    note.Contents("Reviewed by QA");
    note.Icon(TextIcon::Comment);

    doc.Pages()[1].Annotations().Add(note);
    doc.Save("annotated.pdf");

    std::cout << "Annotations on page 1: "
              << doc.Pages()[1].Annotations().Count() << "\n";
}

Định dạng được hỗ trợ

Định dạngPhần mở rộngĐọcGhi
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Hỗ trợ định dạng áp dụng cho việc render trang và các tùy chọn tải ở mức độ tài liệu; các mục này phản ánh các đường xuất khẩu đã được xác nhận (BmpDevice, JpegDevice, TiffDevice, TextDevice) và nhập khẩu (SvgLoadOptions) thay vì việc tuần tự hoá riêng cho chú thích.


Mã nguồn mở & Cấp phép

Aspose.PDF FOSS cho C++ được phát hành dưới giấy phép MIT. Mã nguồn có sẵn tại https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp, và thư viện có thể được sử dụng trong các dự án thương mại và mã nguồn mở mà không có phí giấy phép.


Bắt đầu

Tài nguyên liên quan