Pendahuluan
posting pengantar menunjukkan bentuk dasar konversi: Document.ToHtml(), Document.ToMarkdown(), dan Document.ToDocx(), masing-masing dipanggil tanpa argumen untuk mendapatkan nilai baku yang wajar. Setiap metode tersebut menerima objek opsi yang mengubah apa yang sebenarnya dihasilkan — markup semantik versus salinan yang setia piksel, dokumen Word yang dapat mengalir kembali versus yang mereproduksi tata letak tepat setiap halaman.
Posting ini membahas opsi-opsi tersebut, serta arah konversi yang tidak dibahas sama sekali dalam pengantar: memvalidasi dokumen terhadap standar PDF/A, PDF/X, dan PDF/UA serta memperbaikinya agar mematuhi Document.ConvertToPdfA() dan saudara-saudaranya.
Apa yang Disertakan
HTML Ekspor: Semantik vs Tetap
Document.ToHtml() yang dipanggil tanpa opsi menelusuri pohon struktur dokumen dan menghasilkan markup yang dapat mengalir kembali — heading dan paragraf yang terbaca secara alami di peramban dengan lebar apa pun. Mode itu bergantung pada dokumen yang sudah ditandai terlebih dahulu (Document.CreateStructTree() atau proses penandaan setara); tanpa pohon struktur, ekspor akan kembali ke tubuh heuristik polos alih-alih markup semantik yang sebenarnya. Menyertakan { mode: 'fixed', fonts: 'embed' } beralih ke strategi rendering yang sama sekali berbeda: setiap halaman menjadi SVG yang diposisikan dan teks yang ditempatkan secara absolut, dengan setiap program font yang dapat disematkan di-inline sebagai WOFF @font-face berbasis base64 sehingga halaman tampak sama tanpa pembaca harus memasang font tersebut.
// 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' });
Kedua output melayani tujuan yang berbeda: HTML semantik adalah apa yang Anda inginkan untuk membaca atau memublikasikan ulang konten di web, dan HTML tetap adalah apa yang Anda inginkan ketika tata letak visual halaman yang tepat harus tetap tidak berubah di peramban.
Ekspor Word dan Vektor
Document.ToDocx() yang dipanggil tanpa opsi menghasilkan .docx yang dapat diatur ulang: paragraf dan gambar yang dapat dibungkus ulang dan diedit oleh pengolah kata seperti dokumen normal. Menggunakan { mode: 'textbox' } malah mempertahankan geometri masing-masing halaman, menempatkan konten dalam kotak teks tetap alih-alih membiarkannya mengalir kembali — lebih mendekati salinan visual yang setia daripada dokumen yang dapat diedit. Page.ToSvg() merender satu halaman menjadi string <svg> mandiri, berguna ketika salinan vektor yang independen resolusi dari satu halaman diperlukan daripada gambar 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
Memvalidasi dan Mengonversi ke PDF/A, PDF/X, dan PDF/UA
Document.ValidatePdfA(), Document.ValidatePdfX(), dan Document.ValidatePdfUa() masing-masing memeriksa dokumen terhadap subset terkurasi yang dapat diperiksa mesin dari standar yang bersangkutan — PDF/A (ISO 19005) untuk arsip jangka panjang, PDF/X (ISO 15930) untuk produksi cetak, dan PDF/UA (ISO 14289-1) untuk aksesibilitas — dan mengembalikan ValidationReport dengan flag Passed yang merangkum hasilnya. Document.ConvertToPdfA() (dan yang setara ConvertToPdfX()/ConvertToPdfUa()) berupaya memperbaiki dokumen ke tingkat tersebut, lalu memvalidasi kembali, mengembalikan ConversionReport yang mencantumkan tindakan mana yang sebenarnya diterapkan dan isu mana yang masih belum terselesaikan.
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`);
Konversi tidak dijamin mencapai kepatuhan penuh dalam satu kali proses — penyebab umum kegagalan yang tersisa meliputi font yang tidak tersemat dan output intent yang hilang, keduanya muncul dalam conversion.unresolved.
Mulai Cepat
Pasang paket, lalu render satu halaman ke SVG dan seluruh dokumen ke HTML yang dapat diatur ulang serta 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);
Format yang Didukung
| Format | Ekstensi | Baca | Tulis |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Sumber Terbuka & Lisensi
Aspose.PDF FOSS untuk TypeScript dirilis di bawah lisensi MIT, dengan kode sumber dipublikasikan di GitHub. Tidak ada watermark evaluasi, batas penggunaan, atau file lisensi terpisah yang perlu dikelola, dan pustaka ini dapat digunakan dalam produk komersial tanpa royalti.
Paket saat ini berada pada versi 0.1.0, mencerminkan pengembangan tahap awal yang aktif. Node.js (>=22) adalah satu-satunya persyaratan runtime, dan paket ini tidak memiliki dependensi pihak ketiga lainnya.