ما هي مكتبة pdf-lib ولماذا نحتاجها؟
pdf-lib هي مكتبة قوية وخفيفة الوزن لإنشاء وتحرير مستندات PDF بلغة JavaScript (Node.js والمتصفح). على عكس الحلول الثقيلة مثل Puppeteer أو jsPDF، لا تتطلب pdf-lib تثبيت بيئة متصفح (Chromium) وتعمل حصريًا مع الهياكل الأصلية لـ PDF. إنها مثالية لتوليد التقارير والفواتير والشهادات وأي مستندات أخرى على الخادم حيث تحتاج إلى تحكم كامل في المحتوى: النصوص والخطوط (بما في ذلك التضمين) والصور والنماذج والتعليقات التوضيحية والصفحات.
التثبيت
التثبيت عبر npm بسيط:
npm install pdf-libثم قم باستيرادها إلى المشروع:
const { PDFDocument, rgb, StandardFonts } = require('pdf-lib');الوظائف الأساسية
- إنشاء PDF من الصفر — إضافة الصفحات والنصوص والصور.
- تحرير ملفات PDF الموجودة — نسخ الصفحات، وإدراج النصوص فوقها، ودمج المستندات.
- العمل مع الخطوط — دعم الخطوط القياسية (Helvetica, TimesRoman) وتضمين خطوط TTF المخصصة.
- رسم الأشكال — خطوط، مستطيلات، أشكال بيضاوية مع ضبط اللون والشفافية.
- النماذج والتعليقات التوضيحية — إنشاء حقول نصية، أزرار، روابط.
- التصدير إلى Uint8Array — يمكن حفظ النتيجة في ملف أو إرسالها إلى العميل.
مثال كود على 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), }); // مستطيل page.drawRectangle({ x: 50, y: 200, width: 200, height: 100, color: rgb(0.9, 0.1, 0.1), borderColor: rgb(0, 0, 0), borderWidth: 2, }); // تضمين صورة (PNG) const imageBytes = fs.readFileSync('logo.png'); const image = await doc.embedPng(imageBytes); page.drawImage(image, { x: 300, y: 250, width: 100, height: 100, }); const pdfBytes = await doc.save(); fs.writeFileSync('output.pdf', pdfBytes);}
createPDF().catch(console.error);متى نستخدم pdf-lib؟
pdf-lib هي الخيار الأفضل إذا كنت تعمل في بيئة Node.js (أو المتصفح) وتحتاج إلى:
- توليد PDF بسرعة دون تشغيل متصفح (توفير في الذاكرة والوقت).
- تضمين خطوط مخصصة (مثلًا للغة السيريلية).
- تحرير ملفات PDF جاهزة (إضافة علامات مائية، دمج المستندات).
- إنشاء نماذج تفاعلية.
تجنب استخدام pdf-lib إذا كنت بحاجة إلى عرض HTML/CSS معقد في PDF (هنا سيكون Puppeteer أفضل) أو العمل مع كميات كبيرة من البيانات (قد تبطئ ملفات PDF الثقيلة الأداء).