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 instancesTrườ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 độ
Rectanglemộ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
AddLinkAnnotationkết hợp vớiPdfActionđể đạ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.Fieldsthay 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
| Issue | Cause | Fix |
|---|---|---|
| Ghi chú không hiển thị sau khi lưu | Hình chữ nhật có diện tích bằng không hoặc nằm ngoài giới hạn trang | Xác minh tọa độ nằm trong trang MediaBox |
LinkAnnotation.Uri trả về null | Liên kết sử dụng hành động GoTo hoặc JavaScript, không phải hành động URI | Giả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ỗng | Trường tồn tại nhưng không có mục /V | Kiểm tra field.Value không phải null trước khi xử lý |
Flatten() ném lỗi | Ghi 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 / Method | Description |
|---|---|
AnnotationCollection | Bộ 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.AddTextAnnotation | Thêm chú thích dạng ghi chú dính |
AnnotationCollection.AddLinkAnnotation | Thêm liên kết với URI, đích trang, hoặc hành động tùy chỉnh |
AnnotationCollection.AddHighlightAnnotation | Thêm chú thích đánh dấu văn bản |
AnnotationCollection.AddInkAnnotation | Thêm chú thích vẽ tự do |
AnnotationCollection.AddSquareAnnotation | Thêm chú thích hình chữ nhật |
AnnotationCollection.AddCircleAnnotation | Thêm chú thích hình elip |
AnnotationCollection.AddLineAnnotation | Thêm chú thích đường thẳng |
Annotation.Flatten | Đốt giao diện chú thích vào nội dung trang |
Annotation.Accept | Gửi tới phiên bản tải trọng AnnotationSelector.Visit có kiểu |
AnnotationSelector | Trình thăm dò thu thập các chú thích theo loại |
LinkAnnotation | Lớp con chú thích mang URI hoặc hành động |
TextAnnotation | Chú thích ghi chú dính |
InkAnnotation | Chú thích vẽ tự do với các đường nét |
StampAnnotation | Chú thích lớp phủ hình ảnh hoặc biểu tượng |
WidgetAnnotation.ExportToJson | Chuỗi hoá dữ liệu trường biểu mẫu sang JSON |
Form | Giao diện AcroForm; liệt kê và thao tác các trường |
Field | Lớp cơ sở cho các trường biểu mẫu (TextBoxField, CheckboxField, v.v.) |
CheckboxField | Trường biểu mẫu hộp kiểm |
TextBoxField | Trường nhập văn bản đơn dòng/đa dòng |
ComboBoxField | Trường lựa chọn thả xuống |
RadioButtonField | Trường nhóm nút radio |
AnnotationType | Liệt kê các loại chú thích |
PdfAction.CreateUri | Nhà máy cho các hành động liên kết URI |
PdfAction.CreateJavaScript | Nhà máy cho các hành động JavaScript |