คอร์ API
API หลัก
คู่มือนี้แสดงวิธีการเปิด, แก้ไข, ประกอบ, และบันทึกเอกสาร PDF ด้วยคลาส Document และ Page — จุดเริ่มต้นสำหรับทุกการดำเนินการใน Aspose.PDF FOSS สำหรับ TypeScript. Document โหลด, สร้าง, ประกอบ, และบันทึกไฟล์ PDF ทั้งหมด; Page ซึ่งเข้าถึงผ่าน doc.Pages, เปิดเผยการดำเนินการข้อความ, รูปภาพ, คำอธิบาย, และสตรีมเนื้อหาในแต่ละหน้า.
วงจรชีวิตของเอกสาร
Document.OpenFile() เปิด PDF จากเส้นทางไฟล์; Document.Open() ยอมรับ Uint8Array ในหน่วยความจำ. สามารถตรวจสอบและแก้ไขหน้าได้โดยตรง, และ Document.WriteTo() เขียนผลลัพธ์ออกใหม่ — โดยอาจใช้การบีบอัด xref-stream และ 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
การแยก, การรวม, และการสกัดหน้า
Document.Split() คืนค่า Document หนึ่งรายการต่อหน้า. Document.ExtractPages() รับรายการหน้าที่เริ่มจาก 1 และอนุญาตให้ซ้ำได้และคืนค่า Document ใหม่ที่มีเฉพาะหน้าที่เหล่านั้น. Document.Append() และ Document.InsertPage() คัดลอกหน้าไปยังเอกสารอื่น, และ Document.Merge() รวมหลายเอกสารเป็นหนึ่ง.
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
การสร้างเอกสารใหม่
Document.New() เริ่มต้นเอกสารเปล่าที่ PageFormat ที่กำหนด. Page.AddText() วางข้อความที่ตำแหน่งกำหนด, และ Document.AddPage() เพิ่มหน้าต่อไป, รวมถึงรูปแบบที่หมุนเช่น 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');ลายน้ำและหมายเลขหน้า
Page.AddText() ยังรองรับการหมุน, สี, และความโปร่งใส, ซึ่งเพียงพอสำหรับการแสดงหมายเลขหน้าและลายน้ำแนวทแยงโดยไม่ต้องใช้คลาสเพิ่มเติม.
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');การตรวจสอบสตรีมเนื้อหา
parseContentStream() ถอดรหัสสตรีม /Contents ดิบของหน้าเป็นรายการคู่ operator/operand, และ serializeContentStream() แปลงรายการ operator ที่แก้ไขแล้วกลับเป็นไบต์.
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
การไหลของข้อความหลายคอลัมน์
Page.AddTextBlock() ทำการไหลข้อความยาวเข้าสู่พื้นที่สี่เหลี่ยมและคืนข้อความใดที่ไม่พอดี, ซึ่งสามารถนำไปใช้ในการเรียกครั้งที่สองเพื่อดำเนินการต่อในคอลัมน์อื่น.
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
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- ใช้
Document.OpenFile()สำหรับเส้นทางไฟล์และDocument.Open()สำหรับข้อมูลUint8Arrayในหน่วยความจำ. - หมายเลขหน้าที่ส่งให้กับเมธอดเช่น
RemovePage()และExtractPages()จะเริ่มจาก 1, ส่วนdoc.Pagesเป็นอาร์เรย์ที่เริ่มจาก 0. - ส่ง
{ compressed: true }ไปยังDocument.WriteTo()เพื่อเปิดใช้งานการบีบอัด xref-stream และ object-stream ในผลลัพธ์. Document.ExtractPages()ยอมรับหมายเลขหน้าที่ซ้ำกัน, ดังนั้นหน้าต้นทางเดียวกันอาจปรากฏมากกว่าหนึ่งครั้งในผลลัพธ์.- อ่าน
page.Rectเพื่อคำนวณตำแหน่งโดยอิงกับความกว้างและความสูงจริงของหน้า แทนการกำหนดพิกัดแบบคงที่.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
Document.Open() / OpenFile() โยน InvalidPasswordError | ไฟล์ PDF ถูกป้องกันด้วยรหัสผ่านและไม่ได้ให้รหัสผ่าน (หรือให้รหัสผ่านที่ผิด) | ส่ง { password: '...' } ไปยัง Document.OpenFile() / Document.Open() |
RemovePage() ลบหน้าที่ไม่ถูกต้อง | เลขหน้าที่ส่งไปยัง RemovePage() เริ่มจาก 1 ไม่ใช่ 0 | ส่งหมายเลขหน้าตามระบบ 1-base ซึ่งแตกต่างจากการทำดัชนีอาร์เรย์ doc.Pages |
ผลลัพธ์ WriteTo() มีขนาดใหญ่กว่าที่คาดหวัง | การบันทึกค่าเริ่มต้นจะไม่ใช้การบีบอัด xref/object-stream | ส่ง { compressed: true } ไปยัง Document.WriteTo() |
FAQ
Document.Open() รองรับทั้งเส้นทางไฟล์และข้อมูลในหน่วยความจำหรือไม่?
Document.OpenFile() เปิดจากเส้นทางไฟล์; Document.Open() ยอมรับ Uint8Array ของไบต์ในหน่วยความจำ.
การนับหน้ามีฐานเป็น 0 หรือ 1?
ทั้งสองขึ้นอยู่กับ API: doc.Pages เป็นอาร์เรย์ที่เริ่มจาก 0 อย่างธรรมดา แต่เมธอดเช่น RemovePage() และ ExtractPages() ใช้หมายเลขหน้าแบบเริ่มจาก 1.
ฉันสามารถเข้ารหัสเอกสารในขณะที่บันทึกได้หรือไม่?
ได้ — ส่งตัวเลือก encrypt ไปยัง WriteTo() / Save() พร้อมกับ algorithm: 'aes256' | 'aes128' | 'rc4' และรหัสผ่านผู้ใช้/เจ้าของ (ถ้าต้องการ).
ฉันจะลดขนาดไฟล์ผลลัพธ์ได้อย่างไร?
ส่ง { compressed: true } ไปยัง Document.WriteTo() เพื่อเปิดใช้งานการบีบอัด xref-stream และ object-stream.
ฉันสามารถตรวจสอบตัวดำเนินการของสตรีมเนื้อหาแบบดิบของหน้าได้หรือไม่?
ได้ — parseContentStream(doc.Pages[0].Contents) จะคืนรายการตัวดำเนินการ และ serializeContentStream() จะเปลี่ยนรายการที่แก้ไขกลับเป็นไบต์.
API Reference สรุป
| คลาส / เมธอด | คำอธิบาย |
|---|---|
Document | จุดเข้าหลักสำหรับการสร้าง, โหลด และบันทึกเอกสาร PDF |
Document.OpenFile() / Document.Open() | โหลด PDF จากเส้นทางไฟล์หรือไบต์ในหน่วยความจำ |
Document.New() | เริ่มเอกสารเปล่าด้วย PageFormat ที่กำหนด |
Document.WriteTo() / Document.Save() | เขียนเอกสารไปยังเส้นทางไฟล์หรือคืนค่าเป็นไบต์ |
Document.Split() / Document.Merge() / Document.ExtractPages() | แยก, รวม, และสกัดหน้าในหลายเอกสาร |
Document.Append() / Document.InsertPage() | คัดลอกหน้าเอกสารจากเอกสารหนึ่งไปยังอีกเอกสารหนึ่ง |
Page | หน้า PDF หนึ่งหน้า; เปิดเผยวิธีการของข้อความ, รูปภาพ, คำอธิบาย, และ content-stream |
Page.AddText() / Page.AddTextBlock() | เพิ่มข้อความที่กำหนดตำแหน่งหรือไหลตามหน้า |
parseContentStream() / serializeContentStream() | แยกวิเคราะห์และทำการซีเรียลไลซ์ใหม่ของตัวดำเนินการ content-stream ดิบของหน้า |