توليد تقارير 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> أيضاً في المكتبة
إرسال البريد الإلكتروني في C# (.NET) باستخدام SmtpClient وMailKit
عميل Elasticsearch لـ C# (.NET): NEST و Elastic.Clients.Elasticsearch
مولد رموز QR باستخدام TypeScript: مكتبة qrcode واستخداماتها
التحقق من صحة البيانات في TypeScript: المكتبات، الأساليب وأمثلة الكود