วิธีแปลงเอกสาร PDF ใน TypeScript
คู่มือนี้แสดงวิธีแปลงเนื้อหา PDF ไปเป็นรูปแบบอื่นด้วย Aspose.PDF FOSS สำหรับ TypeScript. Page ส่งออกหน้าเดียวเป็น SVG หรือภาพเรสเตอร์; Document ส่งออกไฟล์ทั้งหมดเป็น HTML, Markdown หรือ DOCX และสามารถตรวจสอบความถูกต้องและแปลงเอกสารเป็น PDF/A. จำเป็นต้องใช้ Node.js 22 หรือใหม่กว่า.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildตรวจสอบการติดตั้งโดยการนำเข้า class Document ในไฟล์ TypeScript ใหม่ — บรรทัดนี้ควรไม่มีข้อผิดพลาดเมื่อแพ็กเกจถูกติดตั้งแล้ว:
import { Document } from '@asposefoss/pdf';ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น
นำเข้า Document เพื่อเปิดไฟล์; วิธีการแปลงที่ใช้ด้านล่างจะถูกเรียกโดยตรงบนอินสแตนซ์ Document และ Page ที่ส่งกลับมา ดังนั้นไม่จำเป็นต้องนำเข้าเพิ่มเติมใด ๆ :
import { Document } from '@asposefoss/pdf';ขั้นที่ 3: แปลงหน้าเป็น SVG หรือรูปภาพแรสเตอร์
Page.ToSvg() ส่งคืนสตริง <svg> แบบอิสระ Page.ToImage() แสดงผลหน้าดเป็นไบต์แรสเตอร์; scale อยู่สัมพันธ์กับ 72 DPI ตามค่าเริ่มต้นของ PDF ดังนั้น scale: 2 จะแสดงผลที่ 144 DPI:
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('input.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const png = doc.Pages[0].ToImage({ scale: 2 }); // Uint8Array of PNG bytes @144 DPI
ขั้นที่ 4: แปลงเอกสารเป็น HTML หรือ Markdown
Document.ToHtml() ในโหมดเริ่มต้น (semantic) จะรีโฟลว์เนื้อหาจากโครงสร้างต้นไม้เป็นหัวข้อและย่อหน้า; ส่งผ่าน { mode: 'fixed' } เพื่อสร้างแต่ละหน้าเป็น SVG ที่จัดตำแหน่งและข้อความที่วางอย่างแน่นอนแทน. Document.ToMarkdown() สร้าง GFM Markdown สำหรับเอกสารทั้งหมด:
const semanticHtml = doc.ToHtml(); // reflowable markup, all pages
const fixedHtml = doc.ToHtml({ mode: 'fixed', fonts: 'embed' }); // positioned, fonts embedded
const markdown = doc.ToMarkdown(); // GFM Markdown, all pages
โหมด Semantic จะอ่านโครงสร้างต้นไม้ที่สร้างโดย Document.GetStructTree() / Document.CreateStructTree() — ในเอกสารที่ไม่มีแท็ก จะย้อนกลับไปใช้เนื้อหาประเมินเชิงประมาณและการส่งออกจะสูญเสียโครงสร้างหัวข้อ.
ขั้นที่ 5: แปลงเอกสารเป็น DOCX
Document.ToDocx() ส่งคืนไบต์ .docx พร้อมเนื้อหาที่รีโฟลว์และรูปภาพที่บรรจุภายใน; ส่งผ่าน { mode: 'textbox' } เพื่อรักษาเรขาคณิตคงที่ของแต่ละหน้าแทนการรีโฟลว์:
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' }); // .docx keeping each page's own geometry
ขั้นตอนที่ 6: ตรวจสอบและแปลงเป็น PDF/A
Document.ValidatePdfA(level), Document.ValidatePdfX(level) และ Document.ValidatePdfUa() คืนค่า ValidationReport ที่อธิบายว่าเอกสารผ่านมาตรฐานที่ระบุหรือไม่ Document.ConvertToPdfA(level, opts) คืนค่า ConversionReport ที่ระบุรายการการแก้ไขที่ทำและปัญหาที่ยังไม่ได้แก้ไข รันการแปลงบนสำเนา Document.ExtractPages() เมื่อเอกสารจริงต้องยังคงถูกบันทึกโดยไม่แปลง:
const report = doc.ValidatePdfA('2b');
console.log(report.Passed);
const copy = doc.ExtractPages(doc.Pages.map((_, i) => i + 1));
const conversion = copy.ConvertToPdfA('2b');
console.log(conversion.applied.length, conversion.unresolved.length, conversion.passed);
copy.Save();ปัญหาทั่วไปและการแก้ไข
Document.ToHtml() สูญเสียโครงสร้างหัวเรื่อง. โหมดเชิงความหมายเดินผ่านโครงสร้างต้นไม้, ดังนั้นจึงต้องทำงานหลังจากขั้นตอนการทำแท็ก — หรือ Document.AutoTag() หรือการทำแท็กโดยผู้เขียนด้วย StructTreeRoot.Append(). ToHtml() ย้อนกลับไปใช้ส่วนเนื้อหาเชิงอุบายเมื่อ GetStructTree() returns null.
ConvertToPdfA() ทำการเปลี่ยนแปลงไฟล์ที่คุณตั้งใจจะเก็บไว้โดยไม่แปลง. ดำเนินการแปลงบนสำเนาจาก Document.ExtractPages(), จากนั้นบันทึกสำเนาแยกต่างหาก — ConvertToPdfA() ดัดแปลงเอกสารที่มันถูกเรียกใช้.
ValidatePdfA() รายงานความล้มเหลวในครั้งแรกที่ทำงาน. สาเหตุทั่วไปคือฟอนต์มาตรฐานที่ไม่ได้ฝังและการขาด /OutputIntent — ตรวจสอบ report.Passed และผลการตรวจกฎแต่ละข้อเพื่อดูว่าข้อกำหนดใดที่ไม่ได้รับการปฏิบัติตาม.
Page.ToImage() ผลลัพธ์ดูความละเอียดต่ำ. scale สัมพันธ์กับ 72 DPI; เพิ่มค่า (เช่น { scale: 2 } สำหรับ 144 DPI) เพื่อให้ได้ผลลัพธ์คุณภาพการพิมพ์.
คำถามที่พบบ่อย
ความแตกต่างระหว่างการส่งออกแบบ semantic และแบบ fixed HTML คืออะไร?
โหมด semantic จะทำการรีโฟลว์เอกสารจากโครงสร้างต้นไม้เป็นมาร์กอัปที่อ่านได้ดีในเบราว์เซอร์ที่ความกว้างใดก็ได้ โหมด fixed จะสร้างแต่ละหน้าเป็น SVG ที่กำหนดตำแหน่งและข้อความที่วางอย่างแน่นอน ทำให้ตรงกับการจัดวางต้นฉบับอย่างแม่นยำ.
Document.ToDocx() รักษาการจัดวางหน้าเดิมไว้หรือไม่?
โดยค่าเริ่มต้น ToDocx() จะรีโฟลว์เนื้อหา ส่งค่า { mode: 'textbox' } เพื่อรักษาเรขาคณิตแบบคงที่ของแต่ละหน้าแทน.
ฉันจะตรวจสอบว่าเอกสารตรงตาม PDF/A หรือไม่ก่อนแปลงได้อย่างไร?
เรียก Document.ValidatePdfA(level) (เช่น '2b') แล้วตรวจสอบ ValidationReport ที่ส่งกลับ — รายงานสถานะปัจจุบันโดยไม่แก้ไขเอกสาร.
ฉันสามารถแปลงเฉพาะบางหน้าได้หรือไม่?
ใช่ — สร้างชุดย่อย Document ก่อนด้วย Document.ExtractPages() แล้วเรียกใช้เมธอดการแปลง (ToHtml(), ToDocx(), ConvertToPdfA() และอื่น ๆ) บนชุดย่อยนั้น.