طريقة توليد ملفات pdf بلغة بايثون
بواسطة سليمان القسيمي
بتاريخ 10 / 01 / 2025
تعد ملفات pdf بمثابة
المعيار العالمي الذي تعتمد عليه مختلف الجهات فيما يتعلق بنقل المستندات الرقمية,
سواءً كانت كتبًا أو إيصالات أو وثائق رسمية وما عدا ذلك من أغراض. في هذا المقال,
سأقوم بشرح آلية توليد مستندات pdf من خلال أكواد بايثون؛ وذلك اعتمادًا على أبسط الطرق
المتاحة.
المحاور
الغرض من إنشاء ملفات pdf بلغة بايثون.
احتياجات إنشاء
مستندات pdf بلغة بايثون.
الغرض من
إنشاء ملفات pdf بلغة
بايثون.
تعد لغة Python أحد أكثر لغات البرمجة عمومية
من حيث قابليتها لإنشاء مختلف المشاريع, فقد تستخدم اللغة لإنشاء المواقع
الالكترونية, التطبيقات الحاسوبية, أو تحليل البيانات ...
وبطبيعة الحال؛ قد تدفعك الحاجة في بعض مشاريعك للتعرف
على آلية إنشاء مستندات pdf من خلال اللغة, وذلك إما لتوليد إيصالات الشراء إن كنت
تعمل على شكل من أشكال تطبيقات المبيعات, أو لتوليد سيرة ذاتية للمستخدم إن كنت
تعمل على إنشاء أداة لكتابة السيرة الذاتية, أو ببساطة, هو مجرد فضول وحب المعرفة
والاطلاع.
احتياجات توليد مستندات pdf بلغة
بايثون.
أولًا: على افتراض أنك تملك نسخة مثبتة على جهازك من
مفسر بايثون؛ ستحتاج إلى تثبيت مكتبة pdfkit المسؤولة
عن عمليات التعامل مع مستندات pdf.
افتح موجه الأوامر؛ واكتب الأمر التالي لتنزيل المكتبة.
pip install pdfkit
ثانيًا: تحتاج مكتبة pdfkit إلى
برنامج خارجي يدعى wkhtmltopdf, حيث أن عملية تنسيق محتوى
ملفات pdf قبل توليدها تعتمد على وسوم html.
قم بتنزيل نسختك من البرنامج عبر هذا
الرابط
بعد تنزيل البرنامج, ستعمل على تثبيته بشكل اعتيادي
جدًا؛ متبعًا معالج التثبيت القياسي.
ثالثًا: قم بإنشاء مجلد جديد لمشروعك, ثم توجه إلى c:/program
files (x86) وانسخ مجلد wkhtmltopdf
وضعه في مشروعك.
هذه الخطوة ضرورية جدًا إذا كنت تريد نقل أداة wkhtmltopdf
عند نشره للمستخدمين.
إعداد
المشروع.
في المجلد الجديد الذي قمت بإنشاؤه, ستعمل الآن على
إدراج ملف بايثون جديد ولنسميه مثلًا pdf.py
افتح هذا الملف واكتب الأوامر التالية:
import pdfkit
import os
path =
os.path.join(os.getcwd(), "wkhtmltopdf", "bin",
"wkhtmltopdf.exe")
config = pdfkit.configuration(wkhtmltopdf=path)
في الكود السابق؛ عملنا على استدعاء كل من مكتبة pdfkit
المسؤولة عن التعامل مع ملفات pdf, ومكتبة
os للتعامل مع المسارات.
وهنا لننتبه إلى مسألة ضرورية وهي أن مكتبة pdfkit
تقوم بتنفيذ أوامر تحويل html إلى
pdf من خلال مسار برنامج wkhtmltopdf
الذي قمنا بتنزيله على program
files, وأنت بطبيعة الحال تريد منه أن يقرأ مسار البرنامج من
مجلد مشروعك مباشرة.
إذًا: المتغير الأول قمنا فيه بكتابة مسار برنامج wkhtmltopdf
الجديد والذي يوجد في مجلد المشروع بداخل مجلد آخر يدعى bin
وبعد تحديد المسار, قمنا بإنشاء كائن من نوع pdfkit
configuration وأضفنا فيه المسار الجديد
وضع محتوى
ملف pdf الجديد
ذكرنا أعلاه أن عملية ترتيب المحتوى وتنسيقه لملفات pdf
تعتمد على وسوم html. وhtml
هي لغة هيكلة تُستخدم في تصميم صفحات مواقع الإنترنت,
ولها استخدامات أخرى تتمثل في تنسيق بعض أجزاء مستندات word وتمثيل
تنسيقات ملفات pdf.
إذًا, أنت في حاجة إلى كتابة محتوى ملفك من خلال لغة html,
وسواء قمت بكتابة المحتوى في ملف html منفصل
أو وضعته على شكل سلسلة نصية string بداخل برنامج فإن الطريقة لن
تختلف بشكل كبير.
في هذا الشرح؛ سأعمل على كتابة محتوى html
مباشرة على شكل string لكي
تتضح الصورة بشكل أفضل.
عد إلى ملف pdf.py وأضف
إليه الكود التالي
content = """
<!DOCTYPE html>
<html lang="ar"
dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>مستند تجريبي</title>
</head>
<body>
<h1>إيصال الشراء</h1>
<p>هذا إيصال شراء تجريبي</p>
</body>
</html>
"""
هنا قمنا بإنشاء متغير من نوع نص ووضعنا فيه محتوى تجريبي لنفترض أنه سيكون
ملف pdf النهائي, وأنت هنا أمام حرية تنسيق النص حسب حاجتك وذلك بتضمين تنسيقات css.
لنفترض أنك ترغب بقراءة محتوى html
من ملف خارجي, وليكن اسمه test.html, فالطريقة ستكون
كالتالي.
with
open("test.html", encoding="utf-8") as file:
content = file.read()
هنا قمنا بإنشاء نفس المتغير النصي content
إلا أنه هذه المرة سيأخذ محتواه من ملف html خارجي.
توليد ملف pdf
الآن؛ وبعد أن قمنا بتجهيز المحتوى؛ بقي فقط أن نقوم بتحويله إلى ملف pdf, والحقيقة فإن الطريقة بسيطة جدًا تقتصر على سطر بايثون واحد.
عد إلى ملف pdf.py واكتب في نهايته السطر
التالي
pdfkit.from_string(content,
"test.pdf", configuration=config)
في السطر السابق؛ قمنا باستخدام الوظيفة from_string من مكتبة pdfkit وهي الدالة المسؤولة عن تحويل نصوص html إلى ملفات pdf
المعامل الذي قمنا بتمريره مباشرة بعد القوس هو محتوى html الذي سيتم تحويله والذي قمنا بتخزينه سابقًا في المتغير content
أما المعامل الثالث فهو اسم ملف pdf ومساره,وقد
أسميناه في حالتنا test.pdf وسيتم حفظه في مجلد
المشروع.
أما المعامل الأخير, فهو مسؤول عن ضبط إعدادات عمل الدالة from_string, حيث أعطيناه المتغير config الذي أنشأناه في الخطوة الأولى وحددنا فيه مسار
برنامج wkhtmltopdf.exe.
هذا كل شيء تقريبًا.
هنا جمعت لكم أجزاء الكود كاملة ليسهل عليكم تأملها.
# pdf.py
import pdfkit
import os
path =
os.path.join(os.getcwd(), "wkhtmltopdf", "bin",
"wkhtmltopdf.exe")
config =
pdfkit.configuration(wkhtmltopdf=path)
content = """
<!DOCTYPE html>
<html lang="ar"
dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>مستند تجريبي</title>
</head>
<body>
<h1>إيصال الشراء</h1>
<p>هذا إيصال شراء تجريبي</p>
</body>
</html>
"""
pdfkit.from_string(content,
"test.pdf", configuration=config)
الخاتمة
تعد مكتبة pdfkit أحد أكثر الحلول مرونة
فيما يتعلق الأمر بإنشاء ملفات pdf بلغة البايثون.
وما يميز هذه المكتبة بالتحديد دعمها المباشر للنصوص العربية, حيث أن هناك خيارات
أخرى أكثر شيوعًا مثل xhtml2pdf إلا أنها تتطلب
مزيدًا من العناية بالخطوط إذا كنت ستعمل على توليد مستندات عربية. المشكلة
الوحيدة مع هذه المكتبة هي اعتمادها على برنامج خارجي والذي تعرفنا على أنه wkhtmltopdf. لذلك, احرص دائمًا على نسخ البرنامج إلى مجلد
مشروعك وكتابة الكود المسؤول عن ضبط المسار الخاص بملف exe للبرنامج..