Giới thiệu

Mọi tính năng trong Aspose.PDF FOSS cho TypeScript đều được truy cập thông qua hai lớp: Document và Page. Document quản lý bộ sưu tập trang và mọi thứ có phạm vi toàn tài liệu — siêu dữ liệu, dấu trang, nhãn trang và lưu/đọc — trong khi mỗi Page trong doc.Pages chịu trách nhiệm về mọi thứ có phạm vi riêng của trang đó: nội dung, chú thích và trường biểu mẫu. Khi đã quen thuộc với hai lớp này, phần còn lại của giao diện thư viện — chuyển đổi, chú thích, biểu mẫu, bảo mật — thực chất chỉ là các phương thức bổ sung trên cùng hai đối tượng.

Bài viết này xem xét chi tiết các phần của giao diện cốt lõi mà bài viết giới thiệu chỉ đề cập sơ lược: ghép các tài liệu từ các tài liệu khác, tạo trang từ đầu, thêm cây dấu trang để điều hướng, và gắn thẻ nội dung để hỗ trợ truy cập. Bốn mục này đều là các lời gọi phương thức đơn giản — không cần mô-đun riêng để nhập, không có phụ thuộc bổ sung nào ngoài gói @asposefoss/pdf.

Đây là các thao tác xuất hiện khi quy trình PDF vượt qua giai đoạn “mở một file, chỉnh sửa, lưu lại”: kết hợp các báo cáo từ nhiều nguồn vào một tập tin, tạo trang một cách lập trình thay vì bắt đầu từ mẫu, và làm cho đầu ra có khả năng điều hướng và truy cập được thay vì chỉ đúng về mặt hình ảnh.


Những gì được bao gồm

Ghép và Sắp xếp lại Tài liệu

Document.Split() chia một tập tin thành các Document đơn trang mới, theo thứ tự trang. Document.ExtractPages() sao chép một tập hợp các số trang (bắt đầu từ 1) đã cho vào một Document tự chứa mới, theo thứ tự được chỉ định — cùng một trang có thể được lặp lại. Các trang từ một tập tin cũng có thể được sao chép sang tập tin khác: Document.Append() sao chép mọi trang của tập tin nguồn vào cuối tập tin đích, và Document.InsertPage() sao chép một trang duy nhất giữa các tập tin tại vị trí cụ thể được đánh số từ 1.

import { Document } from '@asposefoss/pdf';

const report = Document.OpenFile('report.pdf');

const parts = report.Split();                      // one Document per page
const chapter = report.ExtractPages([3, 4, 5]);     // subset (1-based, repeats allowed) as a new Document

const cover = Document.OpenFile('cover.pdf');
report.InsertPage(1, cover.Pages[0]);               // copy a single page across documents
report.Append(chapter);                             // copy chapter's pages onto report

report.WriteTo('assembled.pdf');

Một số tài liệu cũng có thể được gộp lại thành một file duy nhất trong một lời gọi duy nhất bằng Document.Merge(), công cụ này tạo một Document mới từ các bản sao của mỗi trang của mọi tài liệu được truyền vào, theo thứ tự.

Xây dựng Trang từ Đầu

Document.New() tạo một file từ không: không trang khi không chỉ định định dạng, hoặc một trang trắng với PageFormat đã cho khi được truyền vào. Các trang trắng bổ sung được lấy từ Document.AddPage(), công cụ này cũng chấp nhận một PageFormat (hoặc một Page hiện có để sao chép kích thước). Văn bản được vẽ lên trang bằng Page.AddText(), đặt tại điểm (x, y) trong không gian người dùng PDF.

import { Document, PageFormat } from '@asposefoss/pdf';

const doc = Document.New(PageFormat.A4);          // one blank A4 page
doc.Pages[0].AddText('Hello', 72, 720, { fontSize: 14 });
doc.AddPage(PageFormat.A4.landscape());           // append more as you go
doc.WriteTo('scratch.pdf');

Dấu trang và Điều hướng tài liệu

Dàn ý file (bảng bookmark mà hầu hết trình đọc PDF hiển thị bên cạnh trang) được đọc bằng Document.GetOutlines() và được thay thế toàn bộ bằng Document.SetOutlines(), mỗi phần hoạt động với một cây các giá trị OutlineItem. Mỗi OutlineItem chứa một Title, một đích Dest, và tùy chọn Children cho các mục lồng nhau, cùng với các gợi ý hiển thị như Open (mặc định mở rộng) và Bold.

import { Document, OutlineItem } from '@asposefoss/pdf';

const items: OutlineItem[] = [
  { Title: 'Introduction', Dest: { name: 'intro' } },
  {
    Title: 'Chapters',
    Open: true,
    Children: [
      { Title: 'Chapter 1', Dest: { name: 'ch1' } },
      { Title: 'Chapter 2', Dest: { name: 'ch2' } },
    ],
  },
];
doc.SetOutlines(items);

Các đích được đặt tên theo cách này ({ name: 'intro' }) được giải quyết thông qua bảng đích có tên của file, mà Document.GetNamedDestinations() và Document.SetNamedDestination() quản lý trực tiếp khi một bookmark cần chỉ tới một đích không được gắn với nội dung trang.

Văn bản có cấu trúc và gắn thẻ khả năng truy cập

Document.GetStructTree() trả về cây cấu trúc logic của file (hoặc null khi file chưa được gắn thẻ), và Document.CreateStructTree() tạo ra một cây, đánh dấu file là Đã Gắn Thẻ. Khi cây cấu trúc đã tồn tại, Page.GetStructuredText() trả về văn bản của trang dưới dạng các giá trị TextBlock — các đoạn đã được định vị và đã được nhóm thành các dòng và khối dạng đoạn văn — đây là đầu vào cho quá trình gắn thẻ thủ công: duyệt qua các khối, quyết định khối nào là tiêu đề so với nội dung thân, và thêm các phần tử tương ứng vào cây.

function handTagPage(doc: Document, page: Page, heading: string): void {
  const root = doc.GetStructTree();
  if (!root) throw new Error('handTagPage: the document is not tagged yet');
  for (const block of page.GetStructuredText()) {
    const text = block.text.trim();
    if (text.length === 0) continue;
    const el = root.Append(text.startsWith(heading) ? 'H2' : 'P');
    el.MarkContent(page, block.quad);
  }
}

Cây cấu trúc được gắn thẻ là nền tảng cho các tính năng hạ nguồn xây dựng: việc xuất HTML ngữ nghĩa tái tạo lại nội dung từ nó thay vì quay lại bố cục heuristic đơn giản, và Document.ValidatePdfUa() kiểm tra tài liệu so với một phần của tiêu chuẩn khả năng truy cập PDF/UA mà phụ thuộc vào việc có thẻ.


Bắt đầu nhanh

Cài đặt gói, sau đó mở tài liệu, tách ra và ghép lại một phần các trang của nó, và lưu kết quả:

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('report.pdf');

const chapter = doc.ExtractPages([3, 4, 5]);   // subset (1-based, repeats allowed) as a new Document
const cover = Document.OpenFile('cover.pdf');

doc.InsertPage(1, cover.Pages[0]);             // copy a single page across documents
doc.Append(chapter);                           // copy chapter's pages onto doc

doc.WriteTo('assembled.pdf');

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

Định dạngTiện ích mở rộngĐọcGhi
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 mộc đánh giá, giới hạn sử dụng, hay 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ần trả tiền bản quyền.

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


Bắt đầu

Tài nguyên liên quan