مقدمه
introductory post شکل پایهٔ تبدیل را نشان میدهد: Document.ToHtml()، Document.ToMarkdown() و Document.ToDocx()، که هر کدام بدون آرگومان فراخوانی میشوند تا پیشفرض معقولی به دست آید. هر یک از این متدها یک شیء گزینهها میگیرد که خروجی واقعی را تغییر میدهد — نشانهگذاری معنایی در مقابل نسخهٔ دقیق پیکسل به پیکسل، سند Word قابل بازآفرینی در مقابل سندی که چیدمان دقیق هر صفحه را بازتولید میکند.
این پست آن گزینهها را پوشش میدهد، بهعلاوه جهت تبدیلای که مقدمه اصلاً به آن اشاره نکرده است: اعتبارسنجی یک سند بر اساس استانداردهای PDF/A، PDF/X و PDF/UA و اصلاح آن برای سازگاری با Document.ConvertToPdfA() و همارزهای آن.
موارد گنجانده شده
HTML صدور: معنایی در مقابل ثابت
Document.ToHtml() که بدون گزینهها فراخوانی میشود، درخت ساختار سند را پیمایش میکند و نشانهگذاری قابل بازآفرینی تولید مینماید — عناوین و پاراگرافهایی که در هر عرضی بهصورت طبیعی در مرورگر خوانده میشوند. این حالت به این بستگی دارد که سند ابتدا برچسبگذاری شده باشد (Document.CreateStructTree() یا یک عبور برچسبگذاری معادل)؛ بدون درخت ساختار، صدور به یک بدنهٔ هورستیک ساده باز میگردد بهجای نشانهگذاری معنایی واقعی. عبور { mode: 'fixed', fonts: 'embed' } بهطور کامل به استراتژی رندرینگ متفاوتی سوئیچ میکند: هر صفحه به SVG موقعیتیافته و متن بهصورت مطلق قرار گرفته تبدیل میشود، بهطوری که هر برنامهٔ قلم قابل تعبیه بهصورت base64 WOFF @font-face درونیسازی میشود تا صفحه بدون نصب فونتها هم بههمان شکل دیده شود.
// 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' });
دو خروجی برای اهداف متفاوتی استفاده میشوند: HTML معنایی آن چیزی است که برای خواندن یا بازنشر محتوا در وب میخواهید، و HTML ثابت آن چیزی است که وقتی چیدمان بصری دقیق صفحه باید بهصورت بدون تغییر در مرورگر باقی بماند، نیاز دارید.
صادرات Word و Vector
Document.ToDocx() با بدون گزینهها خروجی .docx بازچینششده تولید میکند: پاراگرافها و تصاویری که یک پردازشگر متن میتواند آنها را دوباره بستهبندی کند و مانند یک سند عادی ویرایش نماید. بهجای آن، استفاده از { mode: 'textbox' } هر صفحه را با هندسه خاص خود نگه میدارد و محتوا را در جعبههای متن ثابت قرار میدهد بهجای اینکه بازچینش شود — نزدیکتر به یک کپی بصری دقیق نسبت به سند قابل ویرایش. Page.ToSvg() یک صفحه را به یک رشتهٔ مستقل <svg> رندر میکند، که وقتی نیاز به یک نسخهٔ برداری برداری، مستقل از وضوح برای یک صفحه است و نه یک تصویر رستر، مفید است.
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
تأیید و تبدیل به PDF/A، PDF/X و PDF/UA
Document.ValidatePdfA()، Document.ValidatePdfX() و Document.ValidatePdfUa() هر کدام سند را در برابر زیرمجموعهای منتخب و قابل بررسی توسط ماشین از استاندارد مربوطه بررسی میکنند — PDF/A (ISO 19005) برای بایگانی طولانیمدت، PDF/X (ISO 15930) برای تولید چاپ، و PDF/UA (ISO 14289-1) برای دسترسیپذیری — و یک ValidationReport با پرچم Passed که نتیجه را خلاصه میکند برمیگردانند. Document.ConvertToPdfA() (و معادل ConvertToPdfX()/ConvertToPdfUa()) سعی میکند سند را به آن سطح ارتقا دهد، سپس دوباره اعتبارسنجی میکند و یک ConversionReport برمیگرداند که اقداماتی را که واقعاً اعمال کرده لیست میکند و مشکلاتی که هنوز رفع نشدهاند را نشان میدهد.
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`);
تبدیل تضمین نمیکند که در یک مرحله به سازگاری کامل برسد — علل رایج یک شکست باقیمانده شامل قلمهای نهجاسازیشده و فقدان هدف خروجی است که هر دو در conversion.unresolved ظاهر میشوند.
شروع سریع
پکیج را نصب کنید، سپس یک صفحه را به SVG رندر کنید و کل سند را به HTML بازچینششده و 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);
فرمتهای پشتیبانیشده
| قالب | پسوند | خواندن | نوشتن |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
منبع باز و مجوزدهی
Aspose.PDF FOSS برای TypeScript تحت مجوز MIT منتشر شده است، با منبع منتشر شده در GitHub. هیچ علامت ارزیابی، محدودیت استفاده، یا فایل مجوز جداگانهای برای مدیریت وجود ندارد و کتابخانه میتواند در محصولات تجاری بدون حقالاثر استفاده شود.
این بسته در حال حاضر نسخه 0.1.0 را دارد که نشاندهنده توسعه فعال در مرحله اولیه است. Node.js (>=22) تنها نیاز زمان اجرا است و این بسته هیچ وابستگی شخص ثالث دیگری ندارد.