Inti API
API Inti
Panduan ini menunjukkan cara membuka, mengedit, menyusun, dan menyimpan dokumen PDF dengan kelas Document dan Page — titik masuk untuk setiap operasi dalam Aspose.PDF FOSS untuk TypeScript. Document memuat, membuat, menyusun, dan menyimpan seluruh file PDF; Page, yang diakses melalui doc.Pages, memperlihatkan operasi teks, gambar, anotasi, dan aliran konten per halaman.
Siklus Hidup Dokumen
Document.OpenFile() membuka PDF dari jalur file; Document.Open() menerima Uint8Array dalam memori. Halaman dapat diperiksa dan diedit di tempat, dan Document.WriteTo() menulis hasilnya kembali — secara opsional dengan kompresi xref-stream dan object-stream.
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]);
// Metadata
doc.SetMetadata({ title: 'Report', author: 'Jane', custom: { Dept: 'R&D' } });
// Save
doc.WriteTo('output.pdf'); // or: const bytes = doc.Save();
doc.WriteTo('small.pdf', { compressed: true }); // xref stream + object streams
Memisahkan, Menggabungkan, dan Mengekstrak Halaman
Document.Split() mengembalikan satu Document per halaman. Document.ExtractPages() menerima daftar halaman berbasis 1, yang memperbolehkan pengulangan, dan mengembalikan Document baru hanya dengan halaman tersebut. Document.Append() dan Document.InsertPage() menyalin halaman antar dokumen, dan Document.Merge() menggabungkan beberapa dokumen menjadi satu.
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
Membuat Dokumen Baru
Document.New() memulai dokumen kosong pada PageFormat yang diberikan. Page.AddText() menempatkan teks berposisi, dan Document.AddPage() menambahkan halaman lebih lanjut, termasuk format terrotasi seperti PageFormat.A4.landscape().
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');Tanda Air dan Nomor Halaman
Page.AddText() juga mendukung rotasi, warna, dan opasitas, yang cukup untuk menghasilkan nomor halaman dan tanda air diagonal tanpa kelas tambahan apa pun.
const doc = Document.OpenFile('in.pdf');
const page = doc.Pages[0];
// Page number, right-aligned near the bottom-right corner.
const w = page.Rect[2] - page.Rect[0];
page.AddText(`Page ${page.Number}`, w - 40, 20, { fontSize: 10, align: 'right' });
// Semi-transparent diagonal watermark, centered on the page.
page.AddText('DRAFT', page.Rect[2] / 2, page.Rect[3] / 2, {
font: 'Times-Bold', fontSize: 64, color: [0.7, 0.7, 0.7], opacity: 0.4, rotate: 45, align: 'center',
});
doc.WriteTo('out.pdf');Introspeksi Aliran Konten
parseContentStream() mendekode aliran /Contents mentah halaman menjadi daftar pasangan operator/operand, dan serializeContentStream() mengonversi daftar operator yang telah diedit kembali menjadi byte.
import { parseContentStream, serializeContentStream } from '@asposefoss/pdf';
const ops = parseContentStream(doc.Pages[0].Contents);
// ops: { operator: string, operands: PdfObject[], inlineImage?: {...} }[]
for (const op of ops) {
if (op.operator === 'Tj') console.log('text op:', op.operands);
}
const bytes = serializeContentStream(ops); // round-trips operators + operands
Aliran Teks Multi-Kolom
Page.AddTextBlock() mengalirkan rangkaian teks panjang ke dalam wilayah persegi panjang dan mengembalikan teks apa pun yang tidak muat, yang dapat diberikan ke panggilan kedua untuk melanjutkan aliran ke kolom lain.
const rest = page.AddTextBlock(longText, [72, 600, 200, 150], {
font: 'Times-Roman', fontSize: 11, align: 'justify', valign: 'top', leading: 14,
});
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // continue into a 2nd column
Tips dan Praktik Terbaik
- Gunakan
Document.OpenFile()untuk jalur file danDocument.Open()untuk dataUint8Arraydalam memori. - Nomor halaman yang diberikan ke metode seperti
RemovePage()danExtractPages()menggunakan basis 1, sementaradoc.Pagesadalah array berbasis 0. - Berikan
{ compressed: true }keDocument.WriteTo()untuk mengaktifkan kompresi xref-stream dan object-stream pada output. Document.ExtractPages()menerima nomor halaman yang berulang, sehingga halaman sumber yang sama dapat muncul lebih dari sekali dalam hasil.- Baca
page.Rectuntuk menghitung posisi relatif terhadap lebar dan tinggi halaman yang sebenarnya, alih-alih mengkodekan koordinat secara tetap.
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
Document.Open() / OpenFile() melempar InvalidPasswordError | PDF dilindungi kata sandi dan tidak ada kata sandi (atau kata sandi yang salah) yang diberikan | Berikan { password: '...' } ke Document.OpenFile() / Document.Open() |
RemovePage() menghapus halaman yang salah | Nomor halaman yang diberikan ke RemovePage() berbasis 1, bukan 0 | Berikan nomor halaman berbasis 1, berbeda dari indeks array doc.Pages |
Output WriteTo() lebih besar dari yang diharapkan | Penyimpanan default tidak menggunakan kompresi xref/object-stream | Berikan { compressed: true } ke Document.WriteTo() |
FAQ
Apakah Document.Open() menerima baik jalur file maupun data dalam memori?
Document.OpenFile() membuka dari jalur file; Document.Open() menerima Uint8Array berupa byte dalam memori.
Apakah penomoran halaman berbasis 0 atau berbasis 1?
Keduanya, tergantung pada API: doc.Pages adalah array 0-based biasa, tetapi metode seperti RemovePage() dan ExtractPages() menggunakan nomor halaman berbasis 1.
Apakah saya dapat mengenkripsi dokumen saat menyimpannya?
Ya — berikan opsi encrypt ke WriteTo() / Save() dengan algorithm: 'aes256' | 'aes128' | 'rc4' dan kata sandi pengguna/pemilik opsional.
Bagaimana cara mengurangi ukuran file output?
Berikan { compressed: true } ke Document.WriteTo() untuk mengaktifkan kompresi xref-stream dan object-stream.
Apakah saya dapat memeriksa operator aliran konten mentah halaman?
Ya — parseContentStream(doc.Pages[0].Contents) mengembalikan daftar operator, dan serializeContentStream() mengonversi daftar yang diedit kembali menjadi byte.
Ringkasan API Reference
| Kelas / Metode | Deskripsi |
|---|---|
Document | Titik masuk utama untuk membuat, memuat, dan menyimpan dokumen PDF |
Document.OpenFile() / Document.Open() | Muat PDF dari jalur file atau byte dalam memori |
Document.New() | Mulai dokumen kosong dengan PageFormat yang diberikan |
Document.WriteTo() / Document.Save() | Tulis dokumen ke jalur file atau kembalikan byte |
Document.Split() / Document.Merge() / Document.ExtractPages() | Pisahkan, gabungkan, dan ekstrak halaman di seluruh dokumen |
Document.Append() / Document.InsertPage() | Salin halaman dari satu dokumen ke dokumen lain |
Page | Sebuah halaman PDF tunggal; menyediakan metode teks, gambar, anotasi, dan content-stream. |
Page.AddText() / Page.AddTextBlock() | Tambahkan teks yang diposisikan atau mengalir ke halaman |
parseContentStream() / serializeContentStream() | Mengurai dan menyerialkan kembali operator aliran konten mentah halaman |