คอร์ 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 ดิบของหน้า

ดูเพิ่มเติม

 ภาษาไทย