Cách Chuyển Đổi Tài Liệu PDF trong TypeScript
Hướng dẫn này cho thấy cách chuyển đổi nội dung PDF sang các định dạng khác bằng Aspose.PDF FOSS cho TypeScript. Page xuất một trang duy nhất dưới dạng SVG hoặc ảnh raster; Document xuất toàn bộ tệp dưới dạng HTML, Markdown hoặc DOCX, và có thể xác thực và chuyển đổi tài liệu sang PDF/A. Nó yêu cầu Node.js 22 hoặc mới hơn.
Hướng dẫn từng bước
Bước 1: Cài đặt gói
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildXác minh việc cài đặt bằng cách nhập lớp Document vào một tệp TypeScript mới — dòng này nên được giải quyết mà không có lỗi sau khi gói đã được cài đặt:
import { Document } from '@asposefoss/pdf';Bước 2: Nhập các lớp cần thiết
Nhập Document để mở tệp; các phương thức chuyển đổi được sử dụng bên dưới được gọi trực tiếp trên các đối tượng Document và Page trả về, vì vậy không cần nhập thêm gì nữa:
import { Document } from '@asposefoss/pdf';Bước 3: Chuyển đổi một Trang sang SVG hoặc hình ảnh raster
Page.ToSvg() trả về một chuỗi <svg> độc lập. Page.ToImage() render trang thành các byte raster; scale dựa trên độ phân giải gốc 72 DPI của PDF, vì vậy scale: 2 render ở 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
Bước 4: Chuyển đổi một Tài liệu sang HTML hoặc Markdown
Document.ToHtml() ở chế độ mặc định (ngữ nghĩa) sẽ sắp xếp lại nội dung từ cây cấu trúc thành các tiêu đề và đoạn văn; truyền { mode: 'fixed' } để tái tạo mỗi trang dưới dạng SVG được định vị và văn bản đặt tuyệt đối thay vì vậy. Document.ToMarkdown() tạo ra GFM Markdown cho toàn bộ tài liệu:
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
Chế độ ngữ nghĩa đọc cây cấu trúc được Document.GetStructTree() / Document.CreateStructTree() xây dựng — trên tài liệu không có thẻ, nó sẽ quay lại một phần thân heuristic và việc xuất ra sẽ mất cấu trúc tiêu đề.
Bước 5: Chuyển đổi một Tài liệu sang DOCX
Document.ToDocx() trả về .docx byte với nội dung được sắp xếp lại và hình ảnh được đóng gói bên trong; truyền { mode: 'textbox' } để giữ nguyên hình học cố định của từng trang thay vì sắp xếp lại:
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' }); // .docx keeping each page's own geometry
Bước 6: Xác thực và Chuyển đổi sang PDF/A
Document.ValidatePdfA(level), Document.ValidatePdfX(level), và Document.ValidatePdfUa() trả về một ValidationReport mô tả liệu tài liệu có đáp ứng tiêu chuẩn được chỉ định hay không. Document.ConvertToPdfA(level, opts) trả về một ConversionReport liệt kê các sửa đổi đã áp dụng và những vấn đề còn lại chưa được giải quyết. Thực hiện chuyển đổi trên một bản sao Document.ExtractPages() khi tài liệu hiện tại vẫn phải được lưu không chuyển đổi:
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();Các vấn đề thường gặp và cách khắc phục
Document.ToHtml() mất cấu trúc tiêu đề. Chế độ ngữ nghĩa duyệt cây cấu trúc, vì vậy nó phải chạy sau một lần gắn thẻ — hoặc Document.AutoTag() hoặc gắn thẻ tự viết bằng StructTreeRoot.Append(). ToHtml() trở lại phần thân heuristic khi GetStructTree() returns null.
ConvertToPdfA() thay đổi tệp mà bạn muốn giữ nguyên không chuyển đổi. Thực hiện chuyển đổi trên một bản sao từ Document.ExtractPages(), sau đó lưu bản sao riêng — ConvertToPdfA() thay đổi tài liệu mà nó được gọi trên.
ValidatePdfA() báo cáo các lỗi lần đầu tiên chạy. Một nguyên nhân phổ biến là phông chữ chuẩn chưa được nhúng và một thiếu sót /OutputIntent — kiểm tra report.Passed và các kết quả quy tắc riêng lẻ để xem những điều kiện nào không được đáp ứng.
Page.ToImage() đầu ra trông có độ phân giải thấp. scale được tính dựa trên 72 DPI; tăng nó lên (ví dụ { scale: 2 } cho 144 DPI) để có đầu ra chất lượng in.
Câu hỏi thường gặp
Sự khác nhau giữa xuất HTML ngữ nghĩa và cố định là gì?
Chế độ ngữ nghĩa tái bố cục tài liệu từ cây cấu trúc thành mã đánh dấu đọc tốt trên trình duyệt ở bất kỳ độ rộng nào. Chế độ cố định tái tạo mỗi trang dưới dạng SVG được định vị và văn bản được đặt tuyệt đối, khớp chính xác với bố cục gốc.
Liệu Document.ToDocx() có giữ nguyên bố cục trang gốc không?
Mặc định ToDocx() sẽ tái bố cục nội dung. Gửi { mode: 'textbox' } để giữ lại hình học cố định riêng của mỗi trang.
Làm sao tôi kiểm tra xem một tài liệu có đáp ứng PDF/A hay không trước khi chuyển đổi?
Gọi Document.ValidatePdfA(level) (ví dụ '2b') và kiểm tra ValidationReport được trả về — điều này báo cáo trạng thái hiện tại mà không thay đổi tài liệu.
Tôi có thể chuyển đổi chỉ một phần các trang không?
Có — đầu tiên tạo một tập con Document bằng Document.ExtractPages(), sau đó gọi phương thức chuyển đổi (ToHtml(), ToDocx(), ConvertToPdfA(), và các phần còn lại) trên tập con đó.