วิธีแปลงเอกสาร PDF ใน TypeScript

วิธีแปลงเอกสาร 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() และอื่น ๆ) บนชุดย่อยนั้น.

ดูเพิ่มเติม

 ภาษาไทย