توليد PDF في JavaScript: مكتبة pdf-lib

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هي مكتبة 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 الثقيلة الأداء).

توصيات