1. PDF-ə mətn və başlıqlar əlavə etmənin əsasları
ReportLab-da mətn canvas
obyektindən istifadə olunaraq əlavə edilir. Bu obyekt, şriftlərin, rənglərin, ölçülərin və mətnin mövqelərinin təyin edilməsi metodlarını təqdim edir.
Başlıq və mətn ilə sadə PDF yaratmaq
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# Yeni PDF yaradırıq
pdf_file = canvas.Canvas("styled_text.pdf", pagesize=A4)
width, height = A4
# Başlıq əlavə edirik
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "Satış hesabatı")
# Əsas mətn əlavə edirik
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Bu sənəd son rüb üzrə satış məlumatlarını ehtiva edir.")
# PDF-i yadda saxlayırıq
pdf_file.save()
Bu kod başlıq və əsas mətn olan bir PDF faylı yaradır. Biz setFont()
metodu vasitəsilə mətnin şriftini və ölçüsünü təyin edirik.
2. Mətnin üslublaşdırılması və formatlaşdırılması
ReportLab ilə mətnin rəngini, şriftini və ölçüsünü dəyişdirmək mümkündür, bu da tərzli başlıqlar və əsas məzmun yaratmağa kömək edir. Bu, sənədin struktura salınmasını təmin edir və onu oxumağı daha rahat edir.
Şriftin və mətn ölçüsünün dəyişdirilməsi
ReportLab Helvetica
, Times-Roman
və Courier
kimi standart şriftləri dəstəkləyir. Siz şriftin üslubunu (adi, qalın və ya kursiv) və ölçüsünü setFont()
istifadə edərək təyin edə bilərsiniz.
pdf_file.setFont("Helvetica-Bold", 18) # Qalın şriftdə başlıq
pdf_file.drawString(100, height - 50, "Əsas başlıq")
pdf_file.setFont("Helvetica-Oblique", 14) # Kursivlə alt başlıq
pdf_file.drawString(100, height - 80, "Alt başlıq: Rübün yekunları")
Mətn rənginin dəyişdirilməsi
Mətn rəngini setFillColorRGB()
metodu ilə dəyişə bilərsiniz, bu metod 0-dan 1-ə qədər RGB dəyərlərini qəbul edir.
pdf_file.setFillColorRGB(0.2, 0.4, 0.6) # Mavi rəng
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "Bu mətn mavi rəngdədir.")
Bundan əlavə, reportlab.lib.colors
kitabxanasından əvvəlcədən təyin edilmiş rənglərdən istifadə edə bilərsiniz.
from reportlab.lib import colors
pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "Qırmızı mətn")
3. Mətni hizalama və çoxsətrli mətn
Əgər mətn uzundursa, onu çoxsətrli formatda təqdim etmək daha yaxşıdır. ReportLab, sətirlərin avtomatik keçirilmsini dəstəkləyən TextObject
sinfini təqdim edir.
TextObject
ilə çoxsətrli mətn
text = """
Hesabat son üç ayın satış analizini ehtiva edir.
Biz dəyişiklikləri və onların şirkətin ümumi artımına təsirini nəzərdən keçiririk.
"""
text_object = pdf_file.beginText(100, height - 180)
text_object.setFont("Helvetica", 12)
text_object.setFillColor(colors.darkblue)
for line in text.split("\n"):
text_object.textLine(line)
pdf_file.drawText(text_object)
Bu kod PDF-də hər sətrini ayrıca əlavə edən çoxsətrli mətn bloku yaradır. TextObject
uzun mətn üçün rahatdır, çünki avtomatik formatlaşdırmanı təmin edir.
4. Mətnin stilizasiyası üçün abzaslardan istifadə
reportlab.platypus
modulundan gələn Paragraph
sinfi HTML tag-larını (məsələn, <b>
, <i>
, <u>
) dəstəkləyən stilizə edilmiş mətn əlavə etməyə imkan verir. Paragraph
həmçinin hizalama və indentasiyaları dəstəkləyir, bu da onu formatlaşdırılmış mətn yaratmaq üçün ideal edir.
Paragraph
ilə abzasların yaradılması
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph
# PDF qurulumu
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Qalın və italic mətn ilə abzas yaradılması
text = "Satış Hesabatı
2023-cü ilin rüblük hesabatı"
paragraph = Paragraph(text, styles["Title"])
elements.append(paragraph)
# Əsas mətn əlavə edilməsi
main_text = """
Bu hesabat sonuncu rüb üçün satış haqqında əsas məlumatları,
eləcə də satışın şirkət gəlirinə təsiri haqqında analizləri təqdim edir.
"""
paragraph = Paragraph(main_text, styles["BodyText"])
elements.append(paragraph)
# PDF-in yaradılması
doc.build(elements)
Burada biz stilizə edilmiş mətn əlavə etmək üçün Paragraph
-dən istifadə edirik, hansı ki, HTML tag-ları (qalın və italic mətn) vasitəsilə stilizasiya edir. getSampleStyleSheet()
Title
və BodyText
kimi əsas stilləri təqdim edir, onları dəyişmək mümkündür.
5. Mətn stillərinin tətbiqi
ReportLab imkan verir ki, siz özünəməxsus stillər yaradıb tənzimləyəsiniz və həmin stilləri mətn formatlaşdırma üçün istifadə edəsiniz. Bu xüsusilə hesabatlar hazırlanarkən faydalıdır, çünki bu zaman başlıqlar, altbaşlıqlar və əsas mətn üçün təkrarlanan stillər istifadə olunur.
Fərdi tərz tənzimlənməsi
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph
# PDF tənzimlənməsi
doc = SimpleDocTemplate("custom_styles.pdf", pagesize=A4)
elements = []
# Fərdi tərzin yaradılması
custom_style = ParagraphStyle(
name="CustomStyle",
fontName="Helvetica-Bold",
fontSize=14,
leading=18,
textColor=colors.darkgreen,
spaceAfter=10,
)
# Fərdi tərz ilə abzas yaradılması
paragraph = Paragraph("Bu, fərdi tərz ilə başlıqdır", custom_style)
elements.append(paragraph)
# Əsas mətnin əlavə edilməsi
default_style = ParagraphStyle(
name="Default",
fontName="Helvetica",
fontSize=12,
leading=14,
textColor=colors.black,
spaceAfter=10,
)
paragraph = Paragraph("Bu, standart tərzdən istifadə edərək əsas mətndir.", default_style)
elements.append(paragraph)
# PDF sənədinin yaradılması
doc.build(elements)
Bu nümunədə biz yaşıl mətn rəngi və daha iri şrift ilə CustomStyle
adlı fərdi tərz yaradırıq və bunu başlığa tətbiq edirik.
6. Başlıqlar və mətnlərlə sənədin yaradılması
PDF sənədinin daha strukturlaşdırılmış olmasını təmin etmək üçün hər biri öz başlığı və tərtib edilmiş mətni olan hissələrdən ibarət çox səhifəli bir hesabat yaradıla bilər.
Strukturlaşdırılmış çox səhifəli hesabatın yaradılması
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, PageBreak
# PDF parametrlərinin təyin edilməsi
doc = SimpleDocTemplate("structured_report.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Başlıq üçün stil
title_style = ParagraphStyle("TitleStyle", parent=styles["Title"], fontSize=18, spaceAfter=12)
# Birinci səhifənin başlığı
title = Paragraph("2023-cü il üzrə satış hesabatı", title_style)
elements.append(title)
# Əsas mətn
main_text = """
Bu hesabat 2023-cü ilin birinci rübü üzrə şirkətin satışları haqqında ətraflı məlumat təqdim edir.
Buraya regionlar, məhsul kateqoriyaları və əsas göstəricilər daxildir.
"""
elements.append(Paragraph(main_text, styles["BodyText"]))
# Yeni səhifəyə keçid
elements.append(PageBreak())
# İkinci səhifənin başlığı
subtitle = Paragraph("Kateqoriyalar üzrə satışların analizi", title_style)
elements.append(subtitle)
# İkinci səhifə üçün mətn
category_text = """
İkinci səhifədə məhsul kateqoriyaları üzrə satış məlumatları təqdim edilir.
Hər bir kateqoriya satış dinamikası və bazardakı dəyişikliklər nəzərə alınaraq təhlil edilmişdir.
"""
elements.append(Paragraph(category_text, styles["BodyText"]))
7. Mətn formatlaşdırılmasının incəlikləri
Şriftlərin və onların ölçülərinin seçilməsi
PDF aləmi - yalnız adsız sənədlər deyil, həm də mətndə özünü ifadə etmə imkanlarıdır. Baxmayaraq ki, reportlab
şriftlərin və stillərin sazlanması üçün çoxlu seçimlər təqdim edir, bəzi məhdudiyyətləri də yaddan çıxarmamaq vacibdir. Məsələn, bəzi şriftlər dəstəklənməyə bilər, xüsusən əgər, onların lisenziyalı nüsxələrinə malik deyilsinizsə.
Şriftin sazlanması üçün biz setFont
metodundan istifadə etdik, hansı ki, şriftin adını və onun ölçüsünü qəbul edir:
c.setFont("Times-Roman", 12)
Başlıqların stilləşdirilməsi
Bəlkə siz başlıqları seçmək və onları daha nəzərə çarpan etmək istəyərsiniz. Bunu şriftin ölçüsünü artıraraq və ya onu yarıqalın etmək yolu ilə edə bilərsiniz. Diqqət yetirin, biz başlıqlar üçün Helvetica-Bold
-dan istifadə etdik.
Mətni düzləşdirilməsi
reportlab
-da mətn standart olaraq sol tərəfə düzləşdirilir, amma bunu dəyişə bilərsiniz, mətni genişliyini hesablamaq və mərkəzdə düzləşdirmək üçün metodlardan istifadə edərək. Bu, səhifədə daha mürəkkəb mətn kompozisiyaları yaratmaq üçün faydalıdır.
8. Real tətbiqlər
Mətn və başlıqların PDF-ə əlavə olunmasının faydalı olduğu bəzi ssenarilər:
- Avtomatlaşdırılmış hesabatlar. Məlumat analizlərinizdən çıxarılan dinamik mətnlərlə hesabatlar yarada bilərsiniz.
- Mündəricatlı sənədlər. Başlıqların və alt başlıqların əlavə edilməsi sənədlərdə, xüsusilə böyük olanlarda naviqasiyanı asanlaşdırır.
- Fərdiləşdirilmiş sənədlər. Layihəniz iştirakçılar üçün fərdiləşdirilmiş sənədlər yaratmağa ehtiyac duyursa, məsələn, sertifikatlar və ya dəvətlər, PDF-də mətnin avtomatlaşdırılması olduqca faydalı olacaqdır.
Tipik səhvlər
Bəzən PDF yaradarkən problemlərlə qarşılaşa bilərsiniz. Tez-tez rast gəlinən səhv dəstəklənməyən şriftlərin istifadəsi və ya səhifənin ölçülərini nəzərə almadığınız üçün mətnin düzgün yerləşdirilməməsidir. Skriptinizi bir neçə nümunədə test edin ki, mətnin bütün platformalarda və cihazlarda düzgün göstərildiyinə əmin olun.
Əlavə məlumat və daha mürəkkəb nümunələr üçün ReportLab sənədlərinə və PyPDF2 GitHub səhifəsinə baxın, burada istifadə üçün bir çox nümunələr və məsləhətlər tapa bilərsiniz.
GO TO FULL VERSION