Conversion
Conversion
این صفحه رندر کردن یک PDF به فرمتهای دیگر و تبدیل یک سند به سمت انطباق PDF/A را پوشش میدهد. Document یک متد To*() برای هر فرمت خروجی برای کل سند ارائه میکند؛ همان متدها بر روی Page برای رندر یک صفحه واحد نیز موجود هستند.
رندر به فرمتهای دیگر اسناد
Document.ToHtml()، Document.ToDocx() و Document.ToMarkdown() هر صفحه را رندر میکنند؛ Page.ToSvg() و Page.ToImage() یک صفحه را به یک رشته SVG مستقل یا بایتهای PNG رندر میکنند. هر کدام گزینههای خاص خود را میپذیرند — mode بر روی DocxOptions (‘flow’ محتوا را بازنویسی میکند، ’textbox’ هندسه هر صفحه را حفظ میکند) و images بر روی MarkdownExportOptions (‘inline’ دادههای تصویر را به صورت URI جاسازی میکند، ’external’ فایلهای جداگانه را در imageDir مینویسد).
const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const png = doc.Pages[0].ToImage({ scale: 2 }); // Uint8Array of PNG bytes @144 DPI
const html = doc.ToHtml(); // standalone semantic HTML, all pages
const md = doc.ToMarkdown(); // GFM Markdown, all pages
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' }); // .docx keeping each page's own geometry
ImageOptions (برای Page.ToImage()) همچنین format، quality، scale، یک width / height صریح، و background (‘white’ یا ’transparent’) را میپذیرد.
تبدیل به سمت PDF/A
Document.ConvertToPdfA() سعی میکند سندی را به سمت یک PDF/A level (‘b’ یا ‘u’) اصلاح کند و مجدداً اعتبارسنجی میکند، و یک ConversionReport با applied (اقدامات اصلاحی که انجام داده)، unresolved (مسائلی که نتوانست برطرف کند) و passed باز میگرداند. آن را روی یک نسخه اجرا کنید — برای مثال نسخهای ساخته شده با Document.ExtractPages() — تا سند زنده و در حال کار هرگز توسط تبدیل تغییر نکند.
// ExtractPages gives an independent copy; ConvertToPdfA never touches the original.
const copy = doc.ExtractPages(doc.Pages.map((_, i) => i + 1));
const conversion = copy.ConvertToPdfA('2b');
console.log(`applied ${conversion.applied.length} action(s), `
+ `${conversion.unresolved.length} unresolved, `
+ `result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);
copy.WriteTo('output-pdfa.pdf');قالبهای خروجی دیگر
علاوه بر HTML، Markdown، DOCX، SVG و PNG، کتابخانه همچنین TIFF (TiffExportOptions، encodeTiff()) را صادر میکند و مقادیر فیلد AcroForm را در FDF و XFDF (exportFdfFile()، exportXfdfFile()، importFdfFile()، importXfdfFile()) وارد/صادر مینماید — که برای تبادل دادههای فرم پرشده به طور جداگانه از خود PDF مفید است.
نکات و بهترین روشها
- دستور
Document.ConvertToPdfA()را روی یک کپی اجرا کنید (مثلاً ازDocument.ExtractPages())، هرگز روی سند زندهای که هنوز باید به صورت تبدیلنشده ذخیره شود، اجرا نکنید. - حتی وقتی
passedtrueاست،ConversionReport.unresolvedرا برای سطح اعتبارسنجی سستتر بررسی کنید — برخی اقدامات اصلاحی تنها در سطح سختگیرانهتر بهطور کامل حل میشوند. - از
mode: 'textbox'بر رویDocxOptionsاستفاده کنید وقتی خروجی DOCX نیاز دارد تا هندسه بصری دقیق هر صفحه را حفظ کند؛ از حالت پیشفرض'flow'استفاده کنید وقتی باید مانند یک سند پردازشکلامی عادی بازگردانده شود. - برای اسناد بزرگ، به جای URIهای دادهای درونخطی پیشفرض،
images: 'external'و یکimageDirرا رویMarkdownExportOptionsبگذرانید تا فایل Markdown خود کوچک باقی بماند.
مشکلات رایج
| مشکل | دلیل | راهحل |
|---|---|---|
ConvertToPdfA() هنوز passed: false را گزارش میدهد | همهٔ مواردی که ConversionReport.unresolved فهرست میکند قابل رفع خودکار نیستند (مثلاً قلمهای جاسازیشدهٔ گمشده یا یک /OutputIntent گمشده) | قواعد خاص unresolved را بهصورت دستی برطرف کنید، سپس ConvertToPdfA() را دوباره اجرا کنید |
| سند زنده پس از تلاش برای تبدیل PDF/A بهطور غیرمنتظرهای تغییر یافت | ConvertToPdfA() مستقیماً بر روی سند کاری فراخوانی شد به جای یک نسخهٔ کپی | آن را بر روی یک کپی ساخته شده با Document.ExtractPages() فراخوانی کنید |
| صدور Markdown یک فایل بزرگ تولید میکند | پیکربندی پیشفرض images: 'inline' هر تصویر را بهعنوان data URI جاسازی میکند | برای نوشتن تصاویر بهصورت فایلهای جداگانه، { images: 'external', imageDir: '...' } را پاس کنید |
| خروجی DOCX چیدمان اصلی صفحه را از دست میدهد | پیکربندی پیشفرض mode: 'flow' محتوا را مانند یک واژهپرداز بازچید میکند | برای حفظ هندسهٔ هر صفحه، { mode: 'textbox' } را پاس کنید |
FAQ
PDF را میتوان به چه قالبهایی تبدیل کرد؟
HTML، Markdown و DOCX برای کل سند (Document.ToHtml() / ToMarkdown() / ToDocx()); SVG و PNG به ازای هر صفحه (Page.ToSvg() / Page.ToImage()); بهعلاوه خروجی فرم-دیتا به صورت TIFF و FDF/XFDF.
آیا تبدیل به PDF/A سند اصلی من را تغییر میدهد؟
فقط در صورتی که ConvertToPdfA() را مستقیماً روی آن صدا بزنید. آن را روی یک کپی صدا بزنید — برای مثال doc.ExtractPages(doc.Pages.map((_, i) => i + 1)) — تا سند اصلی بدون تبدیل بماند.
چگونه میتوانم بفهمم که تبدیل PDF/A واقعاً موفق بوده است؟
به ConversionReport.passed مراجعه کنید. applied مواردی را که تبدیل اصلاح کرده لیست میکند، و unresolved مواردی را که نتوانسته است لیست میکند — حتی وقتی passed true است، unresolved را بررسی کنید.
آیا میتوانم فقط مقادیر پر شده فیلدهای فرم را خروجی بگیرم، بدون خود PDF؟
بله — exportFdfFile() و exportXfdfFile() مقادیر فعلی فیلد AcroForm را در یک فایل جداگانه FDF یا XFDF مینویسند؛ importFdfFile() / importXfdfFile() آنها را دوباره به یک سند میخوانند.
API Reference خلاصه
| کلاس/متد | توضیح |
|---|---|
Document.ToHtml() / Document.ToDocx() / Document.ToMarkdown() | رندر کردن هر صفحه به قالب سند دیگری |
Page.ToSvg() / Page.ToImage() | رندر یک صفحه به SVG یا PNG |
DocxOptions / MarkdownExportOptions / ImageOptions | گزینههای رندر برای هر فرمت |
Document.ConvertToPdfA() | سند را به سطح PDF/A بهبود دهید و دوباره اعتبارسنجی کنید |
ConversionReport | نتیجه تبدیل: applied، unresolved، passed |
TiffExportOptions / encodeTiff() | صدور به TIFF |
exportFdfFile() / exportXfdfFile() / importFdfFile() / importXfdfFile() | صدور یا وارد کردن مقادیر فیلد AcroForm به عنوان FDF/XFDF |