CodeGym /Kurslar /Python SELF AZ /Hesabatların avtomatlaşdırılması üçün mətn ilə PDF yaratm...

Hesabatların avtomatlaşdırılması üçün mətn ilə PDF yaratma əsasları

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

1. ReportLab ilə işləməyə giriş

Canvas ilə iş

ReportLab-də PDF sənədləri yaratmaq üçün əsas alət canvas sinifidir. Bu sinif mətn, xətlər, düzbucaqlar və digər qrafik elementləri əlavə etmək üçün metodlar təqdim edir.

Mətn ilə sadə PDF faylı yaratmaq

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# Yeni PDF faylı yarat
pdf_file = canvas.Canvas("basic_report.pdf", pagesize=A4)
width, height = A4

# Mətn əlavə et
pdf_file.setFont("Helvetica", 12)  # Şrift və ölçü təyin edirik
pdf_file.drawString(100, height - 100, "Salam! Bu hesabat ReportLab vasitəsilə yaradılmışdır.")

# PDF-i yadda saxla və bağla
pdf_file.save()

Bu nümunədə "Salam! Bu hesabat ReportLab vasitəsilə yaradılmışdır." mətnli sadə bir PDF faylı yaradılır və birinci səhifədə yerləşdirilir.

2. PDF-fayla mətn əlavə etmək

ReportLab mətni elastik şəkildə tənzimləməyə imkan verir, o cümlədən ölçü, şrift və rəng. Bu, strukturlaşdırılmış hesabatlar yaratmaq üçün vacibdir, çünki başlıqlar, alt başlıqlar və əsas mətn fərqli görünə bilər.

Şrift və mətn ölçüsünün təyin edilməsi

setFont() metodu vasitəsilə şrift və mətn ölçüsünü təyin edin. ReportLab Helvetica, Times-RomanCourier kimi standart şriftləri dəstəkləyir.

Python

pdf_file.setFont("Helvetica-Bold", 16)  # Qalın şrift
pdf_file.drawString(100, height - 50, "Satış hesabatı")  # Başlıq

Mətn rənginin dəyişdirilməsi

ReportLab mətn rəngini setFillColorRGB() metodu vasitəsilə təyin etməyə dəstək verir. Bu metod 0-dan 1-dək RGB dəyərlərini qəbul edir.

Python

pdf_file.setFillColorRGB(0, 0, 1)  # Mavi rəng
pdf_file.drawString(100, height - 150, "Bu mətn mavi rəngdədir.")

3. Mətn blokları ilə iş və çoxsətirli mətn

Əgər mətn uzun oldusa, onu blok kimi formatlaya bilərsiniz, drawString() istifadə edərək koordinatları hər sətir üçün təyin edərək. Ancaq mətni avtomatik şəkildə köçürmək üçün drawText()TextObject istifadə etmək daha rahatdır.

TextObject ilə çoxsətirli mətn əlavə etmək

Python

text = """
2023-cü il üçün satış hesabatı.
Bu hesabat satışlar haqqında ətraflı məlumatı, məlumatların təhlilini və proqnozları əhatə edir.
"""

# Mətn obyekti yaradılması
text_object = pdf_file.beginText(100, height - 200)
text_object.setFont("Helvetica", 12)
text_object.setFillColorRGB(0, 0, 0)

# Mətni əlavə edirik
for line in text.split("\n"):
    text_object.textLine(line)

pdf_file.drawText(text_object)

Bu misalda TextObject adlı mətn obyekti yaradılır, hansı ki avtomatik olaraq hər bir mətn sətirini köçürür.

4. Çoxsəhifəli hesabatların yaradılması

Çoxsəhifəli hesabatlar daha çox məlumat yerləşdirməyə və oxumaq üçün rahat sənəd strukturu yaratmağa imkan verir. ReportLab-da yeni səhifəyə keçid üçün showPage() metodu istifadə olunur.

Çoxsəhifəli PDF sənədin yaradılması

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# PDF yaradırıq
pdf_file = canvas.Canvas("multi_page_report.pdf", pagesize=A4)
width, height = A4

# Səhifə 1
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Səhifə 1: Giriş")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Bu hesabatın birinci səhifəsidir.")
pdf_file.showPage()  # Yeni səhifəyə keçid

# Səhifə 2
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Səhifə 2: Məlumatlar")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Bu hesabatın ikinci səhifəsidir.")

# PDF-ni yadda saxlayırıq və bağlayırıq
pdf_file.save()

Bu nümunədə iki səhifədən ibarət PDF yaradılır, hər səhifənin öz başlığı və mətni var. showPage() metodu cari səhifəni tamamlayır və yenisini başlayır.

5. PDF-ə dinamik verilənlərin əlavə olunması

Hesabatların avtomatlaşdırılması üçün ReportLab, məsələn, siyahıdan və ya dictionary-dən verilənləri dinamik olaraq əlavə etməyə imkan verir. Bu, müntəzəm olaraq yenilənə bilən cədvəllər və ya verilənlər siyahısı ilə hesabatların yaradılmasında faydalıdır.

Siyahıdan məlumatların əlavə olunması

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

data = [
    {"Ay": "Yanvar", "Satışlar": 200},
    {"Ay": "Fevral", "Satışlar": 300},
    {"Ay": "Mart", "Satışlar": 250},
]

pdf_file = canvas.Canvas("sales_report.pdf", pagesize=A4)
width, height = A4

# Başlıq
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Satışlar üzrə hesabat")

# Verilənlərin əlavə olunması
pdf_file.setFont("Helvetica", 12)
y_position = height - 150
for item in data:
    line = f"{item['Ay']}: Satışlar = {item['Satışlar']}"
    pdf_file.drawString(100, y_position, line)
    y_position -= 20

# PDF-in yadda saxlanması
pdf_file.save()

Bu kod hər ay üzrə satış məlumatlarını ayrı-ayrı sətirlərdə əlavə edərək bir PDF faylı yaradır.

6. Şəkilləri əlavə edirik

Mətndən başqa, PDF sənəddə şəkillər və qrafiklər də ola bilər. Gəlin, bir şəkil əlavə etməyə çalışaq:

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def create_pdf_with_image(file_path):
    c = canvas.Canvas(file_path, pagesize=letter)
    width, height = letter

    c.drawString(100, height - 100, "Burada sizin şekiliniz olacaq:")
    # Sizin şekil faylınızın yolu
    image_path = "example_image.jpg"
    c.drawImage(image_path, 100, height - 300, width=200, height=150)

    c.showPage()
    c.save()

file_path = "image_example.pdf"
create_pdf_with_image(file_path)

Sadə deyilmi? İndi bizim bir şəkilli PDF-miz var!

İndi siz mətn və şəkillərlə PDF yaratmağı bildiyiniz üçün gəlin düşünək ki, bunu real həyatda necə tətbiq edə bilərsiniz. Təsəvvür edin ki, siz analitik bir şirkətdə işləyirsiniz və hər ay satış hesabatı hazırlamalısınız. Hər dəfə sənədi əl ilə hazırlamaq yerinə, bir skript yaza bilərsiniz ki, o, avtomatik olaraq məlumatları toplasın və PDF-hesabat yaratsın. Bu, yalnız sizin vaxtınıza qənaət etməyəcək, həm də hesabatdakı məlumatların dəqiqliyini və ardıcıllığını artıracaq.

7. PDF-ə cədvəl əlavə edirik

İndi isə sadə mətndən biraz kənara çıxaq. Bəs əgər məlumatları, məsələn, malların siyahısını və onların qiymətini əlavə etmək istəsək? Gəlin çox sadə bir nümunə götürək:

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

items = [("Ütü", 42.99), ("Çaydan", 15.00), ("Televizor", 250.00)]

def create_pdf_with_table(file_path):
    c = canvas.Canvas(file_path, pagesize=letter)
    width, height = letter

    c.drawString(100, height - 100, "Malların siyahısı və onların qiyməti:")
    
    y = height - 150
    for item in items:
        c.drawString(100, y, f"{item[0]} - {item[1]:.2f} $")
        y -= 20

    c.showPage()
    c.save()

file_path = "table_example.pdf"
create_pdf_with_table(file_path)

Burada biz sadə malların qiymətləri ilə olan siyahını əlavə edirik. Təsəvvür edin imkanları: başqa bir bazadan, məsələn, sevdiyiniz pandas DataFrame-dən əldə edilən məlumatlarla dolu tam bir cədvəl yarada bilərsiniz!

8. Hesabatların avtomatlaşdırılması üçün şablonlardan istifadə

Hesabatları avtomatlaşdırmanın ən güclü yanaşmalarından biri şablonlardan istifadədir. Əslində, sənədin strukturunu və dizaynını əhatə edən şablonlar yarada, sonra isə onları skript vasitəsilə məlumatlarla doldura bilərsən.

Şablon sənədin yaradılması

Statik elementlər, məsələn, loqotiplər və sabit başlıqlar kimi məlumatları əhatə edən əsas şablon yarat. Sonra isə onu tarixlər, qrafiklər və ya siyahılar kimi dinamik məlumatlarla avtomatik doldur. Bunu, məsələn, mətn şablonları üçün Jinja2-dən istifadə edərək təşkil edə və nəticədə PDF sənədini yarada bilərsən.

ReportLab ilə şablonlar yaratmaq üçün statik və dinamik məlumatların birləşməsindən istifadə etmək olar. Məsələn, əvvəlcədən hazırlanmış hesabat fonu ilə loqotiplər və sabit elementlər kimi tərkib hissələrini tətbiq proqramından alınan dinamik məzmuna tətbiq etmək mümkündür.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION