ما هي pdf-lib ولماذا نحتاجها؟
pdf-lib هي مكتبة JavaScript قوية ونقية لإنشاء وتعديل مستندات PDF على جانب الخادم (Node.js) وفي المتصفح. على عكس الحلول الثقيلة مثل Puppeteer، لا تتطلب pdf-lib تثبيت متصفح أو تبعيات خارجية. تعمل مباشرة مع مواصفات PDF، مما يجعلها خيارًا مثاليًا لإنشاء مستندات بسيطة ومتوسطة التعقيد: التقارير، الفواتير، الشهادات، الاستبيانات والعقود.
التثبيت
لتثبيتها في مشروع Node.js، قم بتنفيذ الأمر التالي:
npm install pdf-libالمكتبة لا تحتوي على تبعيات أصلية ومتوافقة مع Node.js 10+.
الإمكانيات الأساسية
- إنشاء PDF من الصفر (صفحات فارغة، نصوص، صور، تضمين الخطوط).
- تحرير ملفات PDF الموجودة (استخراج الصفحات، إدراج، حذف، تدوير).
- العمل مع النماذج (تعبئة الحقول، إنشاء مربعات الاختيار وأزرار الراديو).
- دعم Unicode والخطوط المخصصة (TTF, OTF).
- إضافة البيانات الوصفية (المؤلف، العنوان، التاريخ).
- التصدير إلى ArrayBuffer أو Uint8Array أو Blob.
مثال كود بلغة JavaScript (Node.js)
أدناه مثال بسيط لإنشاء PDF يحتوي على نص وصورة:
const { PDFDocument, rgb } = require('pdf-lib');const fs = require('fs');
async function createPDF() { const doc = await PDFDocument.create(); const page = doc.addPage([600, 400]); // إضافة نص page.drawText('مرحباً بالعالم!', { x: 50, y: 350, size: 30, color: rgb(0, 0.53, 0.71), }); // تضمين خط (اختياري) const fontBytes = fs.readFileSync('./fonts/roboto.ttf'); const font = await doc.embedFont(fontBytes); page.drawText('خط مخصص', { x: 50, y: 300, size: 20, font: font, }); // حفظ const pdfBytes = await doc.save(); fs.writeFileSync('output.pdf', pdfBytes); console.log('تم إنشاء PDF!');}
createPDF().catch(console.error);هذا الكود ينشئ مستندًا بسطرين، أحدهما يستخدم خطًا مضمّنًا. للعمل مع الصور، استخدم doc.embedPng() أو doc.embedJpg().
متى تستخدم pdf-lib
- تحتاج إلى إنشاء PDF بسرعة دون تشغيل متصفح.
- المستند لا يحتوي على تنسيق معقد (جداول، أعمدة) — لهذا الغرض، محركات القوالب مثل Puppeteer أفضل.
- تحتاج مكتبة خفيفة بحجم صغير (~500 KB).
- تعمل مع النماذج أو تقوم بتحرير ملفات PDF موجودة.
الخلاصة
pdf-lib هي خيار ممتاز للمشاريع التي تتطلب إنشاء PDF على Node.js دون تبعيات إضافية. سهلة التعلم، موثقة جيدًا، وتدعم جميع العمليات الأساسية. بالنسبة للتخطيطات المعقدة، فكر في استخدام Puppeteer أو jsPDF، ولكن لـ 80% من المهام، ستكون pdf-lib أكثر من كافية.
```