توليد تقارير PDF باستخدام JavaScript (Node.js): المكتبات والأمثلة

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

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

ابدأ الدورة

توليد تقارير PDF باستخدام JavaScript (Node.js)



إنشاء مستندات PDF هي إحدى المهام الأكثر طلبًا في تطوير الويب. التقارير والفواتير والشهادات والوثائق - كل هذا يتطلب أداة موثوقة للتوليد على جانب الخادم. في نظام Node.js البيئي، توجد عدة مكتبات قوية تتيح إنشاء ملفات PDF بمرونة. في هذه المقالة، سنستعرض بالتفصيل ثلاثة مناهج رئيسية: PDFKit (البرمجة المباشرة)، وPuppeteer (عرض HTML)، وjsPDF (الخيار الخفيف).



لماذا توليد PDF على الخادم؟

  • محتوى ديناميكي — بيانات من قاعدة البيانات، حسابات، رسوم بيانية.
  • الأمان — التحكم في الوصول وإدارة الإصدارات.
  • الأتمتة — إرسال التقارير بشكل جماعي وفقًا لجدول زمني.
  • تنسيق موحد — عرض صحيح على جميع الأجهزة.


1. PDFKit — تحكم كامل في المستند

PDFKit هي المكتبة الأكثر شيوعًا لإنشاء PDF "من الصفر". لا تتطلب متصفحًا وتعمل حصريًا مع كائنات JavaScript. يمكنك التحكم في كل عنصر: النصوص والصور والرسومات المتجهة والخطوط.



التثبيت

npm install pdfkit


مثال: تقرير بسيط مع جدول

const PDFDocument = require('pdfkit');const fs = require('fs');

const doc = new PDFDocument();

doc.pipe(fs.createWriteStream('report.pdf'));

// العنوانdoc.fontSize(24).text('التقرير الشهري', { align: 'center' });doc.moveDown();

// العنوان الفرعيdoc.fontSize(14).text('الفترة: يناير 2025', { align: 'center' });doc.moveDown(2);

// الجدول (محاكاة)doc.fontSize(12).font('Helvetica-Bold');doc.text('المنتج', 50, 150);doc.text('الكمية', 250, 150);doc.text('السعر', 400, 150);

doc.font('Helvetica');const data = [ { item: 'أجهزة كمبيوتر محمولة', qty: 15, price: 75000 }, { item: 'شاشات', qty: 30, price: 25000 }, { item: 'لوحات مفاتيح', qty: 100, price: 1500 }];

let y = 170;data.forEach(row => { doc.text(row.item, 50, y); doc.text(String(row.qty), 250, y); doc.text(String(row.price), 400, y); y += 20;});

// المجموعdoc.moveDown();doc.font('Helvetica-Bold');doc.text(`الإجمالي: ${data.reduce((sum, r) => sum + r.qty * r.price, 0)} روبل`, 50, y + 20);

doc.end();


إمكانيات PDFKit:

  • رسومات متجهة (خطوط، مستطيلات، دوائر).
  • تضمين الخطوط (TrueType, OpenType).
  • دعم Unicode والأحرف السيريلية.
  • إنشاء روابط وتعليقات توضيحية.


2. Puppeteer — عرض HTML إلى PDF

إذا كان لديك بالفعل قالب HTML للتقرير (على سبيل المثال، باستخدام Bootstrap)، فإن Puppeteer هو الخيار الأمثل. يقوم بتشغيل متصفح Chrome بدون واجهة رسومية (headless) وتحويل الصفحة إلى PDF مع الحفاظ على جميع الأنماط والخطوط والرسوم المتحركة JavaScript.



التثبيت

npm install puppeteer


مثال: تحويل قالب HTML

const puppeteer = require('puppeteer');

async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage();

// HTML مع CSS const html = ` <!DOCTYPE html> <html> <head> <style> body { font-family: Arial; padding: 40px; } h1 { color: #2c3e50; } table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ccc; padding: 8px; } </style> </head> <body> <h1>تقرير المبيعات</h1> <table> <tr><th>الشهر</th><th>المبلغ</th></tr> <tr><td>يناير</td><td>450,000 روبل</td>

توصيات