نحوه تبدیل اسناد PDF در TypeScript
این راهنما نشان میدهد چگونه محتوای PDF را با Aspose.PDF FOSS برای TypeScript به فرمتهای دیگر تبدیل کنید. Page یک صفحه را به صورت SVG یا تصویر رستر صادر میکند؛ Document کل فایل را به HTML، Markdown یا DOCX خروجی میدهد و میتواند سند را به PDF/A اعتبارسنجی و تبدیل کند. برای اجرا به Node.js نسخه ۲۲ یا بالاتر نیاز دارد.
راهنمای گام به گام
مرحله 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نصب را با وارد کردن کلاس Document در یک فایل جدید TypeScript تأیید کنید — پس از نصب بسته، این خط باید بدون خطا اجرا شود:
import { Document } from '@asposefoss/pdf';مرحله 2: وارد کردن کلاسهای مورد نیاز
ماژول Document را وارد کنید تا فایل باز شود؛ روشهای تبدیل استفادهشده در ادامه مستقیماً بر روی نمونههای بازگردانده شدهٔ Document و Page صدا زده میشوند، بنابراین نیاز به وارد کردنهای دیگر نیست:
import { Document } from '@asposefoss/pdf';مرحله ۳: تبدیل یک صفحه به SVG یا تصویر رستری
Page.ToSvg() یک رشتهٔ <svg> مستقل برمیگرداند. Page.ToImage() صفحه را به بایتهای رستری رندر میکند؛ scale نسبت به ۷۲ DPI بومی PDF است، بنابراین scale: 2 با ۱۴۴ 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
مرحله ۴: تبدیل یک سند به HTML یا Markdown
Document.ToHtml() در حالت پیشفرض (معنایی) محتوا را از درخت ساختار به عناوین و پاراگرافها بازگردانی میکند؛ برای بازتولید هر صفحه به شکل SVG موقعیتیافته و متن مطلق-موقعیتدار، { mode: 'fixed' } را ارسال کنید. Document.ToMarkdown() برای کل سند، Markdown سبک GFM تولید میکند:
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
حالت معنایی درخت ساختاری ساختهشده توسط Document.GetStructTree() / Document.CreateStructTree() را میخواند — در سند بدون برچسب، به یک بدنهٔ هبردار باز میگردد و در خروجی ساختار عناوین از دست میرود.
مرحله ۵: تبدیل یک سند به 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 به ۷۲ DPI نسبی است؛ آن را افزایش دهید (به عنوان مثال { scale: 2 } به ۱۴۴ DPI) برای خروجی با کیفیت چاپ.
پرسشهای متداول
تفاوت بین خروجی HTML معنایی و ثابت چیست؟
در حالت معنایی، سند از درخت ساختاری خود بازنویسی میشود به نشانهگذاریای که در هر عرضی در مرورگر بهخوبی نمایش داده میشود. در حالت ثابت، هر صفحه بهصورت SVG موقعیتیافته و متنی با مکان مطلق بازتولید میشود تا دقیقاً با چیدمان اصلی منطبق باشد.
آیا Document.ToDocx() چیدمان اصلی صفحه را حفظ میکند؟
بهصورت پیشفرض، ToDocx() محتوا را بازنویسی میکند. برای حفظ هندسه ثابت هر صفحه، { mode: 'textbox' } را ارسال کنید.
چگونه میتوانم قبل از تبدیل، بررسی کنم که آیا سند با PDF/A سازگار است؟
با فراخوانی Document.ValidatePdfA(level) (به عنوان مثال '2b')، ValidationReport بازگرداندهشده را بررسی کنید — این مقدار وضعیت فعلی را بدون تغییر سند گزارش میدهد.
آیا میتوانم فقط زیرمجموعهای از صفحات را تبدیل کنم؟
بله — ابتدا زیرمجموعه Document را با Document.ExtractPages() بسازید، سپس روش تبدیل (ToHtml()، ToDocx()، ConvertToPdfA() و غیره) را روی آن زیرمجموعه فراخوانی کنید.