Chú thích và Biểu mẫu

Chú thích và Biểu mẫu

Chú thích và biểu mẫu

Aspose.PDF FOSS for .NET cung cấp cho bạn quyền truy cập đọc/ghi đầy đủ vào các chú thích PDF
và các trường AcroForm tương tác. Điểm vào chính cho các chú thích là
Page.Annotations (một AnnotationCollection), trong khi các trường biểu mẫu được truy cập
thông qua Document.Form. Cả hai hệ thống phụ đều hoạt động hoàn toàn trong bộ nhớ và không yêu cầu
khóa giấy phép.


Thêm chú thích

AnnotationCollection cung cấp các phương thức trợ giúp có kiểu cho mọi tiêu chuẩn
loại chú thích. Mỗi phương thức nhận một Rectangle xác định vị trí
trên trang cùng với các tham số đặc thù cho loại.

using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];

// Text (sticky-note) annotation
page.Annotations.AddTextAnnotation(
    new Rectangle(72, 720, 200, 740),
    contents: "Review this paragraph",
    title: "Editor",
    open: true);

// Highlight annotation
page.Annotations.AddHighlightAnnotation(
    new Rectangle(72, 680, 300, 700),
    quadPoints: null,
    color: new double[] { 1, 1, 0 });

// Free-text annotation (rendered directly on the page)
page.Annotations.AddFreeTextAnnotation(
    new Rectangle(72, 640, 350, 660),
    contents: "Inline note",
    fontName: "Helvetica",
    fontSize: 10,
    color: new double[] { 0, 0, 0 });

using var ms = new MemoryStream();
doc.Save(ms);

Liên kết chú thích và hành động

Liên kết kết hợp một hình chữ nhật có thể nhấp với PdfAction. Thư viện hỗ trợ các hành động URI, GoTo, JavaScript, Named và Launch.

using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];

// URI link
var uriAction = PdfAction.CreateUri("https://aspose.com");
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 700, 200, 720), uriAction);

// GoTo link (jump to page 3)
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 660, 200, 680),
    destinationPage: 3,
    destRect: new Rectangle(0, 0, 612, 792));

// JavaScript link
var jsAction = PdfAction.CreateJavaScript("app.alert('Hello');");
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 620, 200, 640), jsAction);

doc.Save("links.pdf");

Để đọc lại liên kết sau khi mở một PDF đã lưu, hãy ép kiểu annotation thành LinkAnnotation và kiểm tra thuộc tính Uri của nó hoặc giải quyết từ điển hành động qua PdfAction.Create.


Ghi chú và chú thích hình dạng

Các chú thích đánh dấu (tô sáng, gạch chân, gạch ngang) đánh dấu văn bản hiện có. Các chú thích hình dạng (hình vuông, hình tròn, đường thẳng, mực) vẽ hình học trên trang.

var page = doc.Pages[1];

// Underline
page.Annotations.AddUnderlineAnnotation(
    new Rectangle(72, 600, 300, 620),
    quadPoints: null,
    color: new double[] { 1, 0, 0 });

// Square
page.Annotations.AddSquareAnnotation(
    new Rectangle(72, 540, 200, 580),
    borderColor: new double[] { 0, 0, 1 },
    fillColor: null,
    lineWidth: 1.5);

// Line
page.Annotations.AddLineAnnotation(
    new Rectangle(72, 500, 300, 520),
    x1: 72, y1: 510, x2: 300, y2: 510,
    color: new double[] { 0, 0.5, 0 },
    lineWidth: 2);

// Ink (freehand)
page.Annotations.AddInkAnnotation(
    new Rectangle(72, 440, 200, 480),
    inkPaths: new[] { new double[] { 80, 450, 120, 470, 160, 450 } },
    color: new double[] { 0.5, 0, 0.5 },
    lineWidth: 1);

Chú thích Dấu

Các chú thích dấu phủ lên một hình ảnh hoặc biểu tượng đã định trước trên một trang.

var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);

Làm phẳng chú thích

Gọi Flatten() trên bất kỳ chú thích nào để ghi lại giao diện hình ảnh của nó vào luồng nội dung trang và loại bỏ nó khỏi danh sách chú thích tương tác.

foreach (var annot in doc.Pages[1].Annotations)
{
    annot.Flatten();
}

Mẫu Visitor với AnnotationSelector

AnnotationSelector triển khai mẫu visitor để bạn có thể lọc các chú thích theo kiểu mà không cần ép kiểu thủ công.

var selector = new AnnotationSelector();
doc.Pages[1].Accept(selector);

// selector.Selected now contains all annotations on page 1
foreach (var annot in selector.Selected)
{
    // Process each annotation by type
}

Truyền một thể hiện chú thích đã được gõ vào hàm khởi tạo để lọc chỉ cho kiểu đó:

var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instances

Trường biểu mẫu tương tác

Truy cập các trường AcroForm thông qua Document.Form. Lớp Form cung cấp các thao tác đọc/ghi ở mức trường và hỗ trợ xuất JSON.

using var doc = Document.Open(pdfBytes);

// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
    Console.WriteLine($"{field.FullName}: {field.Value}");
}

Các lớp con của Field bao gồm TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField, và SignatureField.


Xuất dữ liệu biểu mẫu sang JSON

WidgetAnnotation cung cấp các overload ExportToJson để tuần tự hoá dữ liệu trường vào luồng hoặc đường dẫn tệp. Tham số ExportFieldsToJsonOptions tùy chọn kiểm soát định dạng đầu ra.

using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];

using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);

Mẹo và Thực hành Tốt nhất

  • Luôn chỉ định tọa độ Rectangle một cách rõ ràng bằng đơn vị không gian người dùng của PDF (1/72 inch).
  • Sử dụng AddLinkAnnotation kết hợp với PdfAction để đạt độ linh hoạt tối đa — URI, GoTo, JavaScript và các hành động Named đều được hỗ trợ.
  • Gọi Flatten() trước khi phân phối PDF nếu bạn muốn các chú thích hiển thị trong trình xem không tương tác.
  • Truy cập các trường biểu mẫu qua Document.Form.Fields thay vì duyệt qua các chú thích trên trang — bộ sưu tập biểu mẫu xử lý việc nhóm trường qua nhiều trang.
  • Lưu và mở lại tài liệu để xác minh độ trung thực vòng quay của chú thích, đặc biệt đối với các hành động tùy chỉnh.

Các vấn đề thường gặp

IssueCauseFix
Ghi chú không hiển thị sau khi lưuHình chữ nhật có diện tích bằng không hoặc nằm ngoài giới hạn trangXác minh tọa độ nằm trong trang MediaBox
LinkAnnotation.Uri trả về nullLiên kết sử dụng hành động GoTo hoặc JavaScript, không phải hành động URIGiải quyết từ điển hành động qua PdfAction.Create và kiểm tra ActionType
Giá trị trường biểu mẫu là chuỗi rỗngTrường tồn tại nhưng không có mục /VKiểm tra field.Value không phải null trước khi xử lý
Flatten() ném lỗiGhi chú không có tham chiếu /P (trang)Đảm bảo ghi chú đã được thêm qua Page.Annotations

Câu hỏi thường gặp

Làm thế nào để thêm siêu liên kết vào một trang PDF?

Sử dụng page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) để tạo một liên kết URI có thể nhấp vào tại hình chữ nhật được chỉ định.

Tôi có thể đọc các giá trị trường biểu mẫu từ một PDF hiện có không?

Vâng. Mở tài liệu bằng Document.Open, sau đó lặp lại Document.Form.Fields và đọc thuộc tính Value trên mỗi Field.

Thư viện hỗ trợ những loại chú thích nào?

Thư viện hỗ trợ văn bản, văn bản tự do, liên kết, tô sáng, gạch chân, gạch đè, hình vuông, hình tròn, đường thẳng, mực, con dấu, dấu nháy, tệp đính kèm, âm thanh, đa giác, đa đường, tiện ích, watermark, và chú thích 3D. Tất cả các loại đều có sẵn thông qua AnnotationCollection phương thức trợ giúp hoặc xây dựng trực tiếp.

Làm thế nào để lọc chú thích theo loại?

Sử dụng AnnotationSelector với chú thích mẫu đã gõ. Gọi page.Accept(selector) và kiểm tra selector.Selected để tìm các chú thích phù hợp.

Tôi có thể flatten chỉ các chú thích cụ thể không?

Có. Gọi Flatten() trên các thể hiện Annotation riêng lẻ thay vì lặp qua toàn bộ bộ sưu tập.


Tóm tắt Tham chiếu API

Class / MethodDescription
AnnotationCollectionBộ sưu tập kiểu cho mỗi Page; cung cấp các tiện ích Add* cho tất cả các loại chú thích
AnnotationCollection.AddTextAnnotationThêm chú thích dạng ghi chú dính
AnnotationCollection.AddLinkAnnotationThêm liên kết với URI, đích trang, hoặc hành động tùy chỉnh
AnnotationCollection.AddHighlightAnnotationThêm chú thích đánh dấu văn bản
AnnotationCollection.AddInkAnnotationThêm chú thích vẽ tự do
AnnotationCollection.AddSquareAnnotationThêm chú thích hình chữ nhật
AnnotationCollection.AddCircleAnnotationThêm chú thích hình elip
AnnotationCollection.AddLineAnnotationThêm chú thích đường thẳng
Annotation.FlattenĐốt giao diện chú thích vào nội dung trang
Annotation.AcceptGửi tới phiên bản tải trọng AnnotationSelector.Visit có kiểu
AnnotationSelectorTrình thăm dò thu thập các chú thích theo loại
LinkAnnotationLớp con chú thích mang URI hoặc hành động
TextAnnotationChú thích ghi chú dính
InkAnnotationChú thích vẽ tự do với các đường nét
StampAnnotationChú thích lớp phủ hình ảnh hoặc biểu tượng
WidgetAnnotation.ExportToJsonChuỗi hoá dữ liệu trường biểu mẫu sang JSON
FormGiao diện AcroForm; liệt kê và thao tác các trường
FieldLớp cơ sở cho các trường biểu mẫu (TextBoxField, CheckboxField, v.v.)
CheckboxFieldTrường biểu mẫu hộp kiểm
TextBoxFieldTrường nhập văn bản đơn dòng/đa dòng
ComboBoxFieldTrường lựa chọn thả xuống
RadioButtonFieldTrường nhóm nút radio
AnnotationTypeLiệt kê các loại chú thích
PdfAction.CreateUriNhà máy cho các hành động liên kết URI
PdfAction.CreateJavaScriptNhà máy cho các hành động JavaScript

Xem thêm

 Tiếng Việt