ترقيم مستندات PDF بسهولة: دليلك لبناء أداة متقدمة في المتصفح باستخدام JavaScript


عند التعامل مع العقود، التقارير، الفواتير، الأدلة، أو المستندات الأكاديمية، تُسهّل أرقام الصفحات عملية التنقل بشكل كبير. بدلاً من التعديل اليدوي لكل صفحة، تتيح لك مكتبات JavaScript الحديثة إضافة أرقام الصفحات مباشرة داخل المتصفح.

في هذا الدليل، ستقوم ببناء أداة لترقيم صفحات PDF تعمل بالكامل داخل المتصفح باستخدام JavaScript. سيتمكن المستخدمون من تحميل ملف PDF، اختيار مكان ظهور أرقام الصفحات، تخصيص خيارات التنسيق، معاينة المستند، وتنزيل ملف PDF المحدّث دون الحاجة إلى رفع الملفات إلى خادم. كل العمليات تتم محلياً داخل المتصفح لضمان خصوصية أفضل ومعالجة أسرع.

كيف يعمل ترقيم صفحات PDF؟

تقوم أداة ترقيم صفحات PDF بتحميل مستند PDF موجود، وتعديل الصفحات المختارة، وإدراج أرقام الصفحات قبل إنشاء ملف جديد قابل للتنزيل. يُستخدم ترقيم الصفحات بشكل شائع في التقارير، العقود، الفواتير، المستندات القانونية، الكتب الإلكترونية (eBooks)، الأدلة، والأوراق الأكاديمية حيث يحتاج القراء إلى طريقة سهلة للتنقل عبر صفحات متعددة. بدون أرقام الصفحات، قد يكون من الصعب الإشارة إلى أقسام محددة أو تحديد موقع المعلومات داخل المستندات الكبيرة.

يقوم المتصفح بقراءة ملف PDF الذي تم تحميله، ومعالجة كل صفحة، وتطبيق قواعد الترقيم، ثم تصدير المستند المحدّث. كل هذه العمليات تحدث محلياً داخل المتصفح، مما يعني أن المستندات لا تغادر جهاز المستخدم أبداً، مما يعزز الخصوصية والأمان. في هذا الدليل، سنبني أداة تتيح للمستخدمين تحميل ملف PDF، اختيار مكان ظهور أرقام الصفحات، تخصيص خيارات التنسيق، معاينة النتيجة، وتنزيل المستند المحدّث مباشرة من المتصفح.

إعداد المشروع

تم تصميم هذا المشروع ليكون بسيطاً بشكل مقصود. كل ما تحتاجه هو ملف HTML، وملف JavaScript، ومكتبة لمعالجة ملفات PDF. لا يتطلب الأمر خادم خلفي (backend server) أو قاعدة بيانات.

ما هي المكتبة التي سنستخدمها؟

سنستخدم مكتبة PDF-lib لأنها تتيح لنا تحميل مستندات PDF وتعديلها وتصديرها مباشرة داخل JavaScript. أضفها باستخدام CDN:

<script src="https://unpkg.com/pdf-lib"></script>

بمجرد تحميلها، يمكننا قراءة صفحات PDF وإضافة معلومات الترقيم مباشرة داخل المتصفح.

إنشاء واجهة التحميل

يحتاج المستخدمون أولاً إلى طريقة لتحميل ملفات PDF. مدخل ملف بسيط (file input) يؤدي الغرض:

<input type="file" id="pdfFile" accept=".pdf">

بعد تحديد ملف، يمكن لـ JavaScript معالجة ملف PDF وعرض معاينة.

صورة توضيحية للمقال

قراءة صفحات PDF

بعد تحميل الملف، يجب تحميل ملف PDF في الذاكرة. على سبيل المثال:

const bytes = await file.arrayBuffer();
const pdfDoc = await PDFLib.PDFDocument.load(bytes);
const pages = pdfDoc.getPages();

هذا يمنحنا الوصول إلى كل صفحة داخل المستند.

معاينة الصفحات المحملة

قبل تطبيق أرقام الصفحات، يمكن للمستخدمين معاينة صفحات المستند مباشرة داخل المتصفح. يساعد عرض معاينات الصفحات المستخدمين على التحقق من المستند قبل إجراء التغييرات. يتم تحديث قسم المعاينة تلقائياً بعد تحميل ملف PDF.

صورة توضيحية للمقال

تحديد موضع رقم الصفحة

تتطلب المستندات المختلفة مواضع مختلفة لأرقام الصفحات. يفضل بعض المستخدمين الأرقام في المنتصف السفلي، بينما قد يستخدم آخرون الزوايا أو المواضع العلوية. توفر الأداة خيارات تحديد موضع متعددة. على سبيل المثال:

page.drawText(pageNumber, { x: 250, y: 20 });

هذا يسمح بوضع أرقام الصفحات في إحداثيات مختلفة.

صورة توضيحية للمقال

اختيار الصفحات المراد ترقيمها

ليست كل صفحة تحتاج إلى ترقيم. قد يرغب بعض المستخدمين في تطبيق الترقيم على جميع الصفحات. قد يختار آخرون نطاقاً مخصصاً أو يتخطون الصفحة الأولى. تدعم الأداة كل هذه الخيارات.

صورة توضيحية للمقال

تكوين تنسيق الرقم والنمط

يمكن للمستخدمين تخصيص كيفية ظهور أرقام الصفحات داخل المستند. يمكن أن يستخدم تنسيق الترقيم أرقاماً قياسية، أو أحرفاً صغيرة، أو أحرفاً كبيرة. على سبيل المثال:

const pageNumber = `${index + 1}`;

يمكن أيضاً إنشاء أنماط ترقيم مختلفة ديناميكياً.

صورة توضيحية للمقال

يمكن للمستخدمين أيضاً اختيار خطوط مختلفة.

صورة توضيحية للمقال

تسمح الأداة بتغيير حجم النص ولونه ومظهره.

صورة توضيحية للمقال

يمكن للمستخدمين أيضاً تخصيص أنماط الترقيم. على سبيل المثال:

  • Page 1
  • Page 1 of 20
  • Custom patterns
صورة توضيحية للمقال

تتحكم إعدادات الهوامش (Margin settings) في المسافة بين رقم الصفحة وحواف المستند.

صورة توضيحية للمقال

إنشاء ملف PDF المحدّث

بمجرد اكتمال التكوين، يمكن للمستخدمين إنشاء المستند المحدّث. على سبيل المثال:

const pdfBytes = await pdfDoc.save();

يقوم المتصفح بمعالجة الصفحات وإدراج الترقيم تلقائياً.

صورة توضيحية للمقال

معاينة وتنزيل ملف PDF النهائي

بعد المعالجة، يتم عرض ملف PDF المحدّث داخل منطقة المعاينة. يمكن للمستخدمين مراجعة النتائج قبل التنزيل. تعرض الواجهة أيضاً تفاصيل المستند مثل إجمالي الصفحات وحجم الملف. تتيح أزرار التنقل للمستخدمين تصفح الصفحات مباشرة داخل المتصفح. أخيراً، يمكن تنزيل ملف PDF المكتمل.

صورة توضيحية للمقال

كيف تساعد أرقام صفحات PDF في المستندات الواقعية؟

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

تعتمد العقود والمستندات القانونية أيضاً بشكل كبير على ترقيم الصفحات. عند مناقشة الشروط أو البنود، من الشائع الإشارة إلى صفحة معينة لتجنب الارتباك وضمان أن الجميع ينظرون إلى نفس المعلومات.

غالباً ما تتطلب الأوراق الأكاديمية، والوثائق البحثية، وتقارير المشاريع أرقام صفحات للاستشهادات والمراجع وإرشادات التنسيق. وتعتبر العديد من المؤسسات ترقيم الصفحات متطلباً قياسياً للتقديمات الاحترافية.

أرقام الصفحات مفيدة أيضاً للأدلة، والكتب الإلكترونية (eBooks)، وأدلة المستخدم، والمواد التدريبية. يمكن للقراء العودة بسهولة إلى قسم سابق أو اتباع التعليمات التي تشير إلى صفحة أخرى داخل المستند. على سبيل المثال، قد يحتوي دليل شركة على 50 صفحة أو أكثر. بدون أرقام الصفحات، سيحتاج الموظفون إلى البحث يدوياً عن المعلومات. مع تطبيق الترقيم، يمكن للأقسام ببساطة الإشارة إلى صفحات مثل "انظر الصفحة 24 لتفاصيل سياسة الإجازات".

وبالمثل، غالباً ما تستخدم الفواتير والمقترحات والتقارير المالية تنسيقات مثل "Page 3 of 12" حتى يفهم القراء على الفور عدد الصفحات المتضمنة في المستند. إن إضافة أرقام الصفحات يحسن التنقل والتنظيم والاحترافية وسهولة القراءة بشكل عام، مما يجعل المستندات أسهل في الاستخدام لكل من المنشئين والقراء.

عرض توضيحي: كيف تعمل أداة ترقيم صفحات PDF

الخطوة 1: تحميل ملف PDF

يقوم المستخدمون بتحميل مستند PDF إلى المتصفح.

صورة توضيحية للمقال

الخطوة 2: مراجعة معاينات الصفحات

تظهر صفحات المستند الذي تم تحميله داخل قسم المعاينة.

صورة توضيحية للمقال

الخطوة 3: تكوين إعدادات رقم الصفحة

يختار المستخدمون الموضع، نطاق الصفحات، نمط الترقيم، مظهر الخط، الشفافية، وخيارات التنسيق.

صورة توضيحية للمقال

الخطوة 4: إنشاء ملف PDF

بعد اكتمال التكوين، ينقر المستخدمون على زر الإنشاء.

صورة توضيحية للمقال

الخطوة 5: المراجعة والتنزيل

يظهر ملف PDF النهائي في منطقة المعاينة. يمكن للمستخدمين تصفح الصفحات، مراجعة الترقيم، إعادة تسمية، وتنزيل المستند المحدّث.

صورة توضيحية للمقال

ملاحظات هامة من الاستخدام العملي

عند العمل مع ملفات PDF الكبيرة، يصبح الأداء واستخدام الذاكرة من الاعتبارات الهامة. قد تستغرق المستندات التي تحتوي على مئات الصفحات وقتاً أطول للمعالجة داخل المتصفح. يمكن أن يساعد فحص التحقق البسيط في منع معالجة الملفات غير المدعومة:

if (!file || file.type !== "application/pdf") {
    alert("Please upload a valid PDF file");
    return;
}

هذا يضمن أن المستخدمين يقومون بتحميل ملف PDF قبل بدء المعالجة.

تحسين آخر مفيد هو تحديد حجم الملفات الكبيرة جداً قبل تحميلها:

const MAX_SIZE = 20 * 1024 * 1024;
if (file.size > MAX_SIZE) {
    alert("PDF file is too large");
    return;
}

هذا يمنع الاستخدام المفرط للذاكرة ويحسن أداء المتصفح.

عند إنشاء أرقام الصفحات، من المفيد أيضاً معالجة الصفحات مرة واحدة فقط:

const pages = pdfDoc.getPages();
pages.forEach((page, index) => {
    page.drawText(`${index + 1}`);
});

هذا يحافظ على كفاءة عملية الترقيم حتى للمستندات الأكبر حجماً.

قبل تنزيل الملف النهائي، قم دائماً بمعاينة المستند الذي تم إنشاؤه. تساعد مراجعة المخرجات في التحقق من أن أرقام الصفحات تظهر في الموضع الصحيح، وتستخدم التنسيق المتوقع، ولا تتداخل مع محتوى المستند الهام.

أخطاء شائعة يجب تجنبها

أحد الأخطاء الشائعة هو ترميز مواضع أرقام الصفحات بشكل ثابت (hardcoding). يمكن أن تحتوي مستندات PDF المختلفة على أحجام صفحات مختلفة، لذا قد تضع الإحداثيات الثابتة أرقام الصفحات في مكان خاطئ. على سبيل المثال:

page.drawText(pageNumber, { x: 250, y: 20 });

بدلاً من ذلك، من الأفضل عادةً حساب المواضع ديناميكياً بناءً على أبعاد الصفحة.

خطأ آخر هو تطبيق الترقيم على كل صفحة بينما يجب تحديث مجموعة فرعية فقط من الصفحات. على سبيل المثال، قد يرغب المستخدمون في تخطي صفحة الغلاف أو ترقيم نطاقات صفحات محددة فقط. تحقق دائماً من إعدادات اختيار الصفحات قبل إنشاء الملف النهائي.

من المهم أيضاً معاينة المخرجات قبل التنزيل. على سبيل المثال:

const previewPage = pdfDoc.getPage(0);
renderPreview(previewPage);

هذا يساعد على ضمان ظهور أرقام الصفحات تماماً حيثما هو متوقع.

مشكلة شائعة أخرى هي الفشل في التحقق من صحة الملفات التي تم تحميلها قبل المعالجة:

if (!file || file.type !== "application/pdf") {
    alert("Please upload a valid PDF file");
    return;
}

تساعد إضافة التحقق الأساسي في منع الأخطاء وتحسين تجربة المستخدم الشاملة.

الخاتمة

في هذا الدليل، قمت ببناء أداة لترقيم صفحات PDF تعمل داخل المتصفح باستخدام JavaScript. لقد تعلمت كيفية تحميل ملفات PDF، ومعاينة الصفحات، واختيار مواضع الترقيم، وتخصيص خيارات التنسيق، وإنشاء ملفات PDF قابلة للتنزيل مباشرة داخل المتصفح. والأهم من ذلك، رأيت كيف يمكن للمتصفحات الحديثة التعامل مع مهام تحرير المستندات محلياً دون الاعتماد على خادم خلفي (backend server). هذا النهج يجعل الأداة سريعة، خاصة، وسهلة الاستخدام.

بمجرد فهم سير العمل هذا، يمكنك توسيعه بشكل أكبر بميزات مثل الرؤوس (headers)، والتذييلات (footers)، والعلامات المائية (watermarks)، وطوابع PDF، والتعليقات التوضيحية للمستندات (document annotations)، أو إدارة الصفحات المتقدمة. وهنا تبدأ الأمور في أن تصبح شيقة حقاً.