Giới thiệu

Bài giới thiệu đề cập ngắn gọn về các chú thích: tô sáng, gạch chân, ghi chú dán, và tem, được thêm thông qua Page.AddHighlight(), Page.AddUnderline(), và các phương pháp tương tự. Đó chỉ là một phần nhỏ trong những gì một Page thực sự hỗ trợ — phòng trưng bày chú thích trong thư viện này bao gồm đánh dấu, hình dạng vẽ tay, các liên kết với điều hướng thực và hành động gửi biểu mẫu, và tìm kiếm, tất cả đều có thể truy cập trực tiếp từ Page.

Bài viết này đi qua phần còn lại của bề mặt đó: các phương pháp chú thích dạng hình và vẽ tay, những gì hành động của một chú thích Link thực sự có thể làm, và hai cách khác nhau để tìm kiếm nội dung chú thích tùy thuộc vào việc văn bản bạn đang tìm nằm trong hiển thị của chú thích hay trong bình luận /Contents của nó.

Mỗi phương pháp chú thích trả về một handle có kiểu được giới hạn cho chú thích mà nó vừa tạo, và mọi chú thích trên một trang đều có thể đọc được sau này thông qua page.Annotations.


Nội dung bao gồm

Chú thích đánh dấu

Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly(), và Page.AddStrikeOut() đều nhận cùng một dạng tùy chọn — một tập hợp các điểm bốn góc đánh dấu vùng văn bản và một màu tùy chọn — và cả bốn đều trả về một MarkupAnnotation. Các điểm bốn góc thường được suy ra từ một tìm kiếm văn bản hoặc từ một hình chữ nhật văn bản đã biết.

const markup = (body: [number, number, number, number], sample: string,
  add: (quads: number[]) => void): void => {
  const yMid = (body[1] + body[3]) / 2 - 6;
  const textRect: [number, number, number, number] = [body[0] + 4, yMid, body[2] - 4, yMid + 16];
  page.AddText(sample, textRect[0], textRect[1], { fontSize: 12 });
  add(rectToQuads(textRect));
};

markup(cardBody, 'Highlight this phrase', (quads) =>
  page.AddHighlight({ quads, color: [1, 1, 0], contents: 'Yellow highlight' }));
markup(cardBody, 'Underline this phrase', (quads) =>
  page.AddUnderline({ quads, color: [0, 0, 1] }));
markup(cardBody, 'Squiggle this phrase', (quads) =>
  page.AddSquiggly({ quads, color: [1, 0.5, 0] }));
markup(cardBody, 'Strike this phrase out', (quads) =>
  page.AddStrikeOut({ quads, color: [1, 0, 0] }));

Ghi chú và Văn bản độc lập

Page.AddTextNote() thêm một biểu tượng ghi chú dán cổ điển mà khi nhấp sẽ mở một cửa sổ bật lên bình luận, trả về một TextAnnotation. Page.AddFreeText() thay vào đó vẽ văn bản của nó trực tiếp trên trang trong một hộp có viền, với kích thước phông chữ, căn chỉnh và màu nền riêng — hữu ích cho các chú thích cần hiển thị mà không cần mở bất kỳ thứ gì.

page.AddTextNote({
  rect: [x, y, x + 20, y + 20], icon: 'Note', author: 'Reviewer',
  contents: 'This is a sticky-note annotation.',
});

page.AddFreeText({
  rect: [220, 60, 520, 96],
  contents: 'FreeText sample', fontSize: 10, align: 'center',
  fill: [1, 1, 0.8], width: 1,
});

Hình dạng và Mực vẽ tự do

Page.AddSquare() và Page.AddCircle() vẽ một hình chữ nhật hoặc hình elip có viền, mỗi hình có thể có màu nền tùy chọn. Page.AddLine() vẽ một đường thẳng giữa hai điểm, với các kiểu mũi tên có thể chọn độc lập (startEnding/endEnding, ví dụ 'OpenArrow'/'ClosedArrow') ở mỗi đầu. Page.AddPolygon() và Page.AddPolyline() vẽ các hình đa điểm đóng và mở từ một danh sách tọa độ phẳng, và Page.AddInk() ghi lại một hoặc nhiều nét bút tự do dưới dạng paths của danh sách điểm.

page.AddSquare({ rect: [50, 400, 130, 435], color: [0.8, 0, 0], fill: [1, 1, 0.5], width: 2 });
page.AddCircle({ rect: [150, 400, 230, 435], color: [0, 0.5, 0], width: 2 });

page.AddLine({
  line: [260, 417, 420, 417],
  color: [0, 0, 0.7], width: 2,
  startEnding: 'OpenArrow', endEnding: 'ClosedArrow',
});

const stroke: number[] = [];
[-8, 6, -4, 10, -2, 8, -6].forEach((dy, i) => stroke.push(440 + i * 12, 417 + dy));
page.AddInk({ paths: [stroke], color: [0.6, 0, 0.6], width: 2 });

Liên kết và Hành động của chúng

Page.AddLink() trả về một LinkAnnotation mà action quyết định những gì sẽ xảy ra khi nhấp: { type: 'uri', uri: '...' } mở một URL bên ngoài, { type: 'goto', page: N } chuyển đến một trang trong cùng tài liệu, và { type: 'submit', url: '...', format: 'html' } gửi các giá trị trường biểu mẫu hiện tại tới một điểm cuối. Một số trang goto ngoài phạm vi hoặc một đối tượng hành động không hợp lệ sẽ bị từ chối khi tạo thay vì bị chấp nhận một cách âm thầm.

const uriLink = page.AddLink({
  rect: [10, 10, 100, 30], action: { type: 'uri', uri: 'https://example.com' },
});

const gotoLink = page.AddLink({
  rect: [10, 40, 100, 60], action: { type: 'goto', page: 2 },
});

const submitLink = page.AddLink({
  rect: [10, 70, 100, 90],
  action: { type: 'submit', url: 'https://example.com/post', format: 'html' },
});

// page.AddLink({ rect: [...], action: { type: 'goto', page: 99 } }) throws RangeError
// when 99 is out of range for the document.

Tìm kiếm Nội dung Ghi chú

Hai phương pháp khác nhau tìm kiếm văn bản chú thích, và chúng được thiết kế cố ý không giao nhau: Page.SearchAnnotations() tìm kiếm văn bản trong sự xuất hiện riêng của chú thích vẽ — nhãn hiển thị trên một FreeText hoặc con dấu, ví dụ — trong khi Page.SearchAnnotationText() tìm kiếm văn bản được mang trong chú thích /Contents mục nhập, chẳng hạn như nội dung bình luận của ghi chú dính. Một kết quả khớp ở một nơi không đồng nghĩa với việc khớp ở nơi khác.

page.SearchAnnotations('bravo');          // finds it if the annotation's drawn appearance contains it
page.SearchAnnotationText('bravo');       // finds it if the annotation's /Contents comment contains it

Các chú thích không còn cần thiết có thể được xóa trực tiếp bằng Page.RemoveAnnotation(), truyền vào handle của chú thích hoặc từ điển nền của nó.


Bắt đầu nhanh

Cài đặt gói, sau đó thêm một đoạn đánh dấu, một liên kết và một ghi chú dán vào một trang hiện có:

git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run build
import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('input.pdf');
const page = doc.Pages[0];

page.AddHighlight({ quads: [72, 700, 300, 700, 72, 715, 300, 715], color: [1, 1, 0] });

page.AddLink({
  rect: [72, 670, 200, 690], action: { type: 'uri', uri: 'https://example.com' },
});

page.AddTextNote({
  rect: [320, 670, 340, 690], icon: 'Note', author: 'Reviewer',
  contents: 'Please double-check this figure.',
});

doc.WriteTo('annotated.pdf');

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

Định dạngTiện ích mở rộngĐọcViết
PDFpdf✓✓
Markdownmd✓✓
SVGsvg✓✓
TIFFtiff✓✓
DOCXdocx—✓
HTMLhtml—✓
PNGpng—✓
EPUBepub—✓

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

Aspose.PDF FOSS cho TypeScript được phát hành dưới giấy phép MIT, với mã nguồn được công bố trên GitHub. Không có dấu bản quyền đánh giá, giới hạn sử dụng, hoặc tệp giấy phép riêng để quản lý, và thư viện có thể được sử dụng trong các sản phẩm thương mại mà không có phí bản quyền.

Gói hiện đang ở phiên bản 0.1.0, phản ánh quá trình phát triển giai đoạn đầu năng động. Node.js (>=22) là yêu cầu runtime duy nhất, và gói không có bất kỳ phụ thuộc bên thứ ba nào khác.


Bắt đầu

Tài nguyên liên quan