Cách làm việc với Core PDF API trong TypeScript
Hướng dẫn này chỉ ra cách mở, tạo, chỉnh sửa, tách và lưu tài liệu PDF bằng Aspose.PDF FOSS cho TypeScript. Các lớp Document và Page là điểm vào cho mọi thao tác trong thư viện — mở và tạo tệp, chỉnh sửa trang ngay tại chỗ, tách và kết hợp tài liệu, và lưu kết quả. Nó chỉ yêu cầu Node.js 22 trở lên.
Hướng dẫn từng bước
Bước 1: Cài đặt gói
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildXác minh việc cài đặt bằng cách nhập lớp Document trong một tệp TypeScript mới — dòng này nên được giải quyết mà không có lỗi sau khi gói đã được cài đặt:
import { Document } from '@asposefoss/pdf';Bước 2: Nhập các lớp cần thiết
Nhập Document để tải hoặc tạo một PDF, và PageFormat nếu bạn dự định bắt đầu một tài liệu từ đầu:
import { Document, PageFormat } from '@asposefoss/pdf';Bước 3: Mở một PDF hiện có và chỉnh sửa các trang
Document.OpenFile() mở một PDF từ đường dẫn tệp; Document.Open() chấp nhận một Uint8Array trong bộ nhớ. Các trang có thể được kiểm tra và chỉnh sửa ngay tại chỗ, và Document.WriteTo() ghi kết quả ra lại.
import { Document } from '@asposefoss/pdf';
// Open from disk (or Document.Open(uint8array) for in-memory data)
const doc = Document.OpenFile('input.pdf');
// Inspect and edit pages
const pages = doc.Pages;
console.log(pages.length);
pages[0].Rotate = 90;
doc.RemovePage(2); // 1-based page number
doc.Reorder([3, 1, 2]);
// Save
doc.WriteTo('output.pdf'); // or: const bytes = doc.Save();
Bước 4: Tạo một PDF mới từ đầu
Document.New() bắt đầu một tài liệu trống tại PageFormat đã cho. Page.AddText() đặt văn bản có vị trí, và Document.AddPage() thêm các trang tiếp theo.
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');Bước 5: Tách, Trích xuất và Kết hợp các trang
Document.Split() trả về một Document cho mỗi trang. Document.ExtractPages() nhận một danh sách trang bắt đầu từ 1, cho phép lặp lại và trả về một Document mới chỉ chứa các trang đó. Document.Append() và Document.InsertPage() sao chép các trang giữa các tài liệu, và Document.Merge() kết hợp nhiều tài liệu thành một.
const parts = doc.Split(); // one Document per page
const chapter = doc.ExtractPages([3, 4, 5]); // subset (1-based, repeats allowed) as a new Document
docA.Append(docB); // copy all of docB's pages onto docA
docA.InsertPage(1, docB.Pages[0]); // copy a single page across documents
Các vấn đề thường gặp và cách khắc phục
Document.OpenFile() throws InvalidPasswordError. Tệp PDF được bảo vệ bằng mật khẩu và không có mật khẩu nào (hoặc mật khẩu sai) được cung cấp. Pass { password: '...' } to Document.OpenFile() / Document.Open().
RemovePage() or ExtractPages() xóa hoặc trích xuất trang sai. Các phương pháp này nhận số trang bắt đầu từ 1, trong khi doc.Pages là một mảng thuần 0-based — hai cách đánh chỉ số này dễ bị nhầm lẫn.
WriteTo() đầu ra lớn hơn dự kiến. Lưu mặc định không sử dụng nén xref/object-stream. Pass { compressed: true } to Document.WriteTo() để bật nó.
Các chỉnh sửa được thực hiện cho doc.Pages[i] không xuất hiện trong tệp đã lưu. Các chỉnh sửa trang phải được thực hiện trước khi gọi tới Document.WriteTo() / Document.Save() — không có bước “commit” riêng biệt, nhưng các chỉnh sửa thực hiện sau khi lưu sẽ không được phản ánh trong tệp đã được ghi vào đĩa.
Câu hỏi thường gặp
Làm thế nào để tải một tệp PDF từ bộ nhớ đệm thay vì từ đường dẫn tệp?
Gửi một Uint8Array tới Document.Open() thay vì một đường dẫn tới Document.OpenFile().
Làm thế nào để xoay một trang?
Đặt page.Rotate thành 90, 180, hoặc 270, sau đó lưu tài liệu bằng Document.WriteTo().
Có thể sao chép một trang duy nhất từ một tài liệu sang tài liệu khác không?
Có — Document.InsertPage(at, sourcePage) sao chép một trang từ tài liệu khác tại vị trí dựa trên chỉ số 1 đã cho, mà không sao chép toàn bộ tài liệu.
Liệu Document.ExtractPages() có cho phép cùng một trang xuất hiện hai lần không?
Có. Danh sách số trang được truyền vào Document.ExtractPages() cho phép lặp lại, vì vậy cùng một trang nguồn có thể xuất hiện hơn một lần trong kết quả.