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 dan Document.Open() untuk data Uint8Array dalam memori.
  • Nomor halaman yang diberikan ke metode seperti RemovePage() dan ExtractPages() menggunakan basis 1, sementara doc.Pages adalah array berbasis 0.
  • Berikan { compressed: true } ke Document.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.Rect untuk menghitung posisi relatif terhadap lebar dan tinggi halaman yang sebenarnya, alih-alih mengkodekan koordinat secara tetap.

Masalah Umum

MasalahPenyebabPerbaikan
Document.Open() / OpenFile() melempar InvalidPasswordErrorPDF dilindungi kata sandi dan tidak ada kata sandi (atau kata sandi yang salah) yang diberikanBerikan { password: '...' } ke Document.OpenFile() / Document.Open()
RemovePage() menghapus halaman yang salahNomor halaman yang diberikan ke RemovePage() berbasis 1, bukan 0Berikan nomor halaman berbasis 1, berbeda dari indeks array doc.Pages
Output WriteTo() lebih besar dari yang diharapkanPenyimpanan default tidak menggunakan kompresi xref/object-streamBerikan { 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 / MetodeDeskripsi
DocumentTitik 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
PageSebuah 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

Lihat Juga

 Bahasa Indonesia