اذهب إلى المحتوى
  • 0

pdf files

كمال شلبي

السؤال

1. كيف يمكنني إنشاء ملفات pdf بواسطة بايثون بحيث تكون على شكل جدول مثلا

كود المنتج  اسم المنتج السعر الكمية 

يوجد ملف مرفق فيه الخانات كبيرة جدا فأريد تصغيرها لحجم مناسب

2. أريد استخدام الأرقام العربية  بدلا من الأرقام اللاتينية في العديد من البرامج. كيف ذلك؟ 

في الملف المرفق مثال.

وشكرا لكم

mydoc.pdf

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

مرحبا
من الممكن استخدام مكتبة reportlab لإنشاء ملفات PDF بواسطة بايثون وتحويل جدول إلى مستند PDF ثبت المكتبة عن طريق ذاللك الامر
 

pip install reportlab

يمكن تحويل جدول الي pdf عن طريق استخدام هذه الكود
 

from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

#    هنا بيانات الجدول 
data = [
    ["كود المنتج", "اسم المنتج", "السعر", "الكمية"],
    ["001", "منتج 1", "50", "10"],
    ["002", "منتج 2", "30", "15"],
    ["003", "منتج 3", "20", "20"]
]

# هنا انشاء اسم ال pdf 
pdf_filename = "جدول.pdf"
document = SimpleDocTemplate(pdf_filename, pagesize=letter)

#اعداد ال style الخاص بالجدول 
table = Table(data)
table.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
    ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, 0), 'Arabic'),
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
    ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
    ('GRID', (0, 0), (-1, -1), 1, colors.black),
]))

# اضافة الجدول الي مستند pdf
document.build([table])

بالنسبة للارقام العربية من المككن استخدام مكتبة arabicreshaper,  bidi عن طريق تثبيتهم
 

pip install arabic-reshaper
pip install python-bidi

بعد ذاللك في اعدادات الجدول استخدم هذا الكود
 

from arabic_reshaper import reshape
from bidi.algorithm import get_display

reshaped_data = [[get_display(reshape(cell)) for cell in row] for row in data]  # هنا لتحويل كل cell من الجدول والي االغة العربيى 
table = Table(reshaped_data)

اذن الكود ككل يحب ان يكون هكذا
 

from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from arabic_reshaper import reshape
from bidi.algorithm import get_display

# بيانات الجدول
data = [
    ["كود المنتج", "اسم المنتج", "السعر", "الكمية"],
    ["001", "منتج 1", "50", "10"],
    ["002", "منتج 2", "30", "15"],
    ["003", "منتج 3", "20", "20"]
]

# إعداد مستند PDF
pdf_filename = "جدول.pdf"
document = SimpleDocTemplate(pdf_filename, pagesize=letter)

# تشكيل البيانات للعرض الصحيح للنصوص العربية
reshaped_data = [[get_display(reshape(cell)) for cell in row] for row in data]

# إعداد الجدول
table = Table(reshaped_data)
table.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
    ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, 0), 'Arabic'),
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
    ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
    ('GRID', (0, 0), (-1, -1), 1, colors.black),
]))

# إضافة الجدول إلى المستند
document.build([table])

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 18 ساعة قال Mahmoud Hassan19:

مرحبا
من الممكن استخدام مكتبة reportlab لإنشاء ملفات PDF بواسطة بايثون وتحويل جدول إلى مستند PDF ثبت المكتبة عن طريق ذاللك الامر
 

pip install reportlab

يمكن تحويل جدول الي pdf عن طريق استخدام هذه الكود
 

from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

#    هنا بيانات الجدول 
data = [
    ["كود المنتج", "اسم المنتج", "السعر", "الكمية"],
    ["001", "منتج 1", "50", "10"],
    ["002", "منتج 2", "30", "15"],
    ["003", "منتج 3", "20", "20"]
]

# هنا انشاء اسم ال pdf 
pdf_filename = "جدول.pdf"
document = SimpleDocTemplate(pdf_filename, pagesize=letter)

#اعداد ال style الخاص بالجدول 
table = Table(data)
table.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
    ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, 0), 'Arabic'),
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
    ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
    ('GRID', (0, 0), (-1, -1), 1, colors.black),
]))

# اضافة الجدول الي مستند pdf
document.build([table])

بالنسبة للارقام العربية من المككن استخدام مكتبة arabicreshaper,  bidi عن طريق تثبيتهم
 

pip install arabic-reshaper
pip install python-bidi

بعد ذاللك في اعدادات الجدول استخدم هذا الكود
 

from arabic_reshaper import reshape
from bidi.algorithm import get_display

reshaped_data = [[get_display(reshape(cell)) for cell in row] for row in data]  # هنا لتحويل كل cell من الجدول والي االغة العربيى 
table = Table(reshaped_data)

اذن الكود ككل يحب ان يكون هكذا
 

from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from arabic_reshaper import reshape
from bidi.algorithm import get_display

# بيانات الجدول
data = [
    ["كود المنتج", "اسم المنتج", "السعر", "الكمية"],
    ["001", "منتج 1", "50", "10"],
    ["002", "منتج 2", "30", "15"],
    ["003", "منتج 3", "20", "20"]
]

# إعداد مستند PDF
pdf_filename = "جدول.pdf"
document = SimpleDocTemplate(pdf_filename, pagesize=letter)

# تشكيل البيانات للعرض الصحيح للنصوص العربية
reshaped_data = [[get_display(reshape(cell)) for cell in row] for row in data]

# إعداد الجدول
table = Table(reshaped_data)
table.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
    ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, 0), 'Arabic'),
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
    ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
    ('GRID', (0, 0), (-1, -1), 1, colors.black),
]))

# إضافة الجدول إلى المستند
document.build([table])

 

 

بارك الله فيك وزادك علما وفضلا
بعد أن نسخت الكود الذي تكرمت بارساله ظهرت لي سلسلة الأخطاء التالية علما بأن المكتبات المطلوبة مثبة بواسطة الpip. ههلا أرشدتني إلى خطأي؟ وشكرا  لك
C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\python.exe H:\sqlite\pdf5h.py 
Traceback (most recent call last):
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 697, in getFont
    return _fonts[fontName]
           ~~~~~~^^^^^^^^^^
KeyError: 'Arabic'

 

During handling of the above exception, another exception occurred:

 

Traceback (most recent call last):
  File "H:\sqlite\pdf5h.py", line 35, in <module>
    document.build([table])
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 1317, in build
    BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 1082, in build
    self.handle_flowable(flowables)
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 931, in handle_flowable
    if frame.add(f, canv, trySplit=self.allowSplitting):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\frames.py", line 158, in _add
    w, h = flowable.wrap(aW, h)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 1346, in wrap
    self._calc(availWidth, availHeight)
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 735, in _calc
    self._calc_width(availWidth,W=W)
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 542, in _calc_width
    t = self._elementWidth(v,s)
        ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 608, in _elementWidth
    return max([stringWidth(x,fontName,fontSize) for x in v])
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 608, in <listcomp>
    return max([stringWidth(x,fontName,fontSize) for x in v])
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 733, in stringWidth
    return getFont(fontName).stringWidth(text, fontSize, encoding=encoding)
           ^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 699, in getFont
    return findFontAndRegister(fontName)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 681, in findFontAndRegister
    face = getTypeFace(fontName)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 638, in getTypeFace
    return _typefaces[faceName]
           ~~~~~~~~~~^^^^^^^^^^
KeyError: 'Arabic'

 

Process finished with exit code 1

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 ساعة قال كمال شلبي:

 

بارك الله فيك وزادك علما وفضلا
بعد أن نسخت الكود الذي تكرمت بارساله ظهرت لي سلسلة الأخطاء التالية علما بأن المكتبات المطلوبة مثبة بواسطة الpip. ههلا أرشدتني إلى خطأي؟ وشكرا  لك
C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\python.exe H:\sqlite\pdf5h.py 
Traceback (most recent call last):
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 697, in getFont
    return _fonts[fontName]
           ~~~~~~^^^^^^^^^^
KeyError: 'Arabic'

 

During handling of the above exception, another exception occurred:

 

Traceback (most recent call last):
  File "H:\sqlite\pdf5h.py", line 35, in <module>
    document.build([table])
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 1317, in build
    BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 1082, in build
    self.handle_flowable(flowables)
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 931, in handle_flowable
    if frame.add(f, canv, trySplit=self.allowSplitting):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\frames.py", line 158, in _add
    w, h = flowable.wrap(aW, h)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 1346, in wrap
    self._calc(availWidth, availHeight)
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 735, in _calc
    self._calc_width(availWidth,W=W)
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 542, in _calc_width
    t = self._elementWidth(v,s)
        ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 608, in _elementWidth
    return max([stringWidth(x,fontName,fontSize) for x in v])
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 608, in <listcomp>
    return max([stringWidth(x,fontName,fontSize) for x in v])
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 733, in stringWidth
    return getFont(fontName).stringWidth(text, fontSize, encoding=encoding)
           ^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 699, in getFont
    return findFontAndRegister(fontName)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 681, in findFontAndRegister
    face = getTypeFace(fontName)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 638, in getTypeFace
    return _typefaces[faceName]
           ~~~~~~~~~~^^^^^^^^^^
KeyError: 'Arabic'

 

Process finished with exit code 1

 

ممكن ترسل ملف المشروع

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال Mahmoud Hassan19:

ممكن ترسل ملف المشروع

لا يوجد مشروع. فقط أردت تجربة البرنامج الذي أرسلته لي فظهرت لي الأخطاء التي أرسلتها لك

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 17 دقائق مضت قال كمال شلبي:

لا يوجد مشروع. فقط أردت تجربة البرنامج الذي أرسلته لي فظهرت لي الأخطاء التي أرسلتها لك

تمام المشكلة عندك انه لا يوجد font arabic متسجل علي جهازك ساسل لك الفونت مع الكود اللي عندي

 

test.rar

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال Mahmoud Hassan19:

تمام المشكلة عندك انه لا يوجد font arabic متسجل علي جهازك ساسل لك الفونت مع الكود اللي عندي

 

test.rar 58.16 kB · 0 تنزيلات

تمام لكن لا زالت الأرقام بالانجليزي

جدول.pdf

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...