Giới thiệu
Bài viết introductory post cho thấy dạng cơ bản của việc chuyển đổi: Document.ToHtml(), Document.ToMarkdown(), và Document.ToDocx(), mỗi cái được gọi mà không có đối số để có một giá trị mặc định hợp lý. Mỗi phương pháp trong số đó nhận một đối tượng tùy chọn thay đổi những gì thực sự được xuất ra — đánh dấu ngữ nghĩa so với bản sao trung thực pixel, tài liệu Word có thể tái bố trí so với tài liệu tái tạo chính xác bố cục của mỗi trang.
Bài viết này bao gồm các tùy chọn đó, cộng thêm một hướng chuyển đổi mà phần giới thiệu không đề cập tới: xác thực một tài liệu dựa trên các tiêu chuẩn PDF/A, PDF/X, và PDF/UA và khắc phục nó để đạt tuân thủ với Document.ConvertToPdfA() và các thành phần đồng hành của nó.
Nội dung bao gồm
HTML Export: Ngữ nghĩa vs Cố định
Document.ToHtml() được gọi mà không có tùy chọn sẽ duyệt cây cấu trúc của tài liệu và tạo ra đánh dấu có thể tái bố trí — các tiêu đề và đoạn văn đọc tự nhiên trong trình duyệt ở bất kỳ độ rộng nào. Chế độ này phụ thuộc vào việc tài liệu được gắn thẻ trước (Document.CreateStructTree() hoặc một quá trình gắn thẻ tương đương); nếu không có cây cấu trúc, việc xuất sẽ quay lại một phần thân heuristic đơn giản thay vì đánh dấu ngữ nghĩa thực sự. Việc truyền { mode: 'fixed', fonts: 'embed' } chuyển sang một chiến lược render hoàn toàn khác: mỗi trang trở thành SVG được định vị và văn bản được đặt tuyệt đối, với mọi chương trình phông chữ có thể nhúng được nhúng dưới dạng base64 WOFF @font-face để trang hiển thị giống như vậy mà không cần người đọc cài đặt phông chữ.
// Semantic mode reflows from the structure tree, so this must run after the
// tagging pass: ToHtml falls back to a heuristic body when GetStructTree() is
// null, and the export loses its heading structure silently.
const semantic = doc.ToHtml();
const fixed = doc.ToHtml({ mode: 'fixed', fonts: 'embed' });
Hai đầu ra phục vụ các mục đích khác nhau: ngữ nghĩa HTML là những gì bạn muốn để đọc hoặc tái xuất bản nội dung trên web, và cố định HTML là những gì bạn muốn khi bố cục hình ảnh chính xác của trang phải được giữ nguyên không thay đổi trong trình duyệt.
Xuất Word và Vector
Document.ToDocx() được gọi mà không có tùy chọn sẽ tạo ra một .docx đã được tái bố trí: các đoạn văn và hình ảnh mà trình xử lý văn bản có thể bọc lại và chỉnh sửa như một tài liệu bình thường. Thay vì, việc truyền { mode: 'textbox' } giữ nguyên hình học riêng của mỗi trang, đặt nội dung vào các hộp văn bản cố định thay vì để chúng tái bố trí — gần hơn với một bản sao trực quan trung thực hơn là một tài liệu có thể chỉnh sửa. Page.ToSvg() chuyển đổi một trang duy nhất thành một chuỗi <svg> độc lập, hữu ích khi cần một bản sao vector, không phụ thuộc độ phân giải của một trang thay vì hình ảnh raster.
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' }); // .docx keeping each page's own geometry
Xác thực và Chuyển đổi sang PDF/A, PDF/X và PDF/UA
Document.ValidatePdfA(), Document.ValidatePdfX() và Document.ValidatePdfUa() mỗi cái kiểm tra tài liệu so với một tập con được tuyển chọn, có thể kiểm tra bằng máy của tiêu chuẩn tương ứng — PDF/A (ISO 19005) cho lưu trữ dài hạn, PDF/X (ISO 15930) cho sản xuất in ấn, và PDF/UA (ISO 14289-1) cho khả năng truy cập — và trả về một ValidationReport kèm theo một cờ Passed tóm tắt kết quả. Document.ConvertToPdfA() (và phiên bản tương đương ConvertToPdfX()/ConvertToPdfUa()) cố gắng khắc phục tài liệu lên mức đó, sau đó thực hiện lại kiểm tra, trả về một ConversionReport liệt kê các hành động mà nó thực sự đã áp dụng và những vấn đề còn chưa được giải quyết.
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
const pdfa = doc.ValidatePdfA('2b');
console.log(`validate: PDF/A-2b ${pdfa.Passed ? 'passes' : 'fails'}`);
// Conversion runs against a copy: the live document is still saved
// unconverted, so ConvertToPdfA must never touch it directly.
const pages = doc.Pages;
const allPages: number[] = [];
for (let i = 1; i <= pages.length; i++) allPages.push(i);
const copy = doc.ExtractPages(allPages);
const conversion = copy.ConvertToPdfA('2b');
console.log(`pdf/a convert: ${conversion.applied.length} action(s) applied, `
+ `${conversion.unresolved.length} unresolved`);
console.log(`result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);
Quá trình chuyển đổi không được đảm bảo đạt được sự tuân thủ đầy đủ trong một lần — các nguyên nhân phổ biến gây ra lỗi còn lại bao gồm phông chữ không được nhúng và thiếu ý định đầu ra, cả hai đều xuất hiện trong conversion.unresolved.
Bắt đầu nhanh
Cài đặt gói, sau đó xuất một trang sang SVG và toàn bộ tài liệu sang HTML đã tái bố trí và DOCX:
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildimport { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const html = doc.ToHtml(); // reflowable HTML (falls back without a structure tree)
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
// fs.writeFileSync('page1.svg', svg);
// fs.writeFileSync('out.html', html);
// fs.writeFileSync('out.docx', docx);
Định dạng được hỗ trợ
| Định dạng | Phần mở rộng | Đọc | Ghi |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Mã nguồn mở & Giấy phép
Aspose.PDF FOSS cho TypeScript được phát hành theo giấy phép MIT, với mã nguồn được công bố trên GitHub. Không có dấu watermark đánh giá, giới hạn sử dụng, hoặc tệp giấy phép riêng để quản lý, và thư viện có thể được sử dụng trong các sản phẩm thương mại mà không phải trả tiền bản quyền.
Gói hiện đang ở phiên bản 0.1.0, phản ánh quá trình phát triển giai đoạn đầu đang hoạt động. Node.js (>=22) là yêu cầu runtime duy nhất, và gói không có bất kỳ phụ thuộc bên thứ ba nào khác.