المقدمة
يظهر المقال التمهيدي الشكل الأساسي للتحويل: 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) هو المتطلب الوحيد للبيئة التنفيذية، ولا تحتوي الحزمة على أي تبعيات طرف ثالث أخرى.