-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, PageBreak
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.pdfgen import canvas
PDF final
file_path = "/mnt/data/onde_a_alma_mora_completo.pdf"
doc = SimpleDocTemplate(file_path, pagesize=A4,
rightMargin=72, leftMargin=72,
topMargin=72, bottomMargin=72)
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='TitleStyle', fontName='Times-Roman', fontSize=28, leading=32, alignment=1, spaceAfter=30))
styles.add(ParagraphStyle(name='PrefaceStyle', fontName='Times-Roman', fontSize=14, leading=20, alignment=0, spaceAfter=18))
styles.add(ParagraphStyle(name='Poem', fontName='Georgia', fontSize=14, leading=22, alignment=1, spaceAfter=20))
story = []
Função para adicionar borda em todas as páginas
def add_border(canvas_obj, doc_obj):
width, height = A4
canvas_obj.setLineWidth(1)
canvas_obj.rect(36, 36, width-72, height-72) # borda de 36pt de margem
Capa estilizada
story.append(Spacer(1, 1.5*inch))
Imagem de fundo opcional da capa
story.append(Image('/caminho/para/fundo_capa.png', width=A4[0], height=A4[1]))
story.append(Spacer(1, 2inch))
story.append(Paragraph("Onde a Alma Mora", ParagraphStyle(
name='CoverTitle', fontName='Times-Roman', fontSize=36, alignment=1, textColor='black', spaceAfter=20)))
story.append(Paragraph("Livro de Poesias", ParagraphStyle(
name='CoverSubtitle', fontName='Times-Roman', fontSize=18, alignment=1, textColor='black')))
story.append(Spacer(1, 4inch))
story.append(Paragraph("Autor: Seu Nome", ParagraphStyle(
name='CoverAuthor', fontName='Times-Roman', fontSize=14, alignment=1, textColor='black')))
story.append(PageBreak())
Prefácio
prefacio = """
Este livro nasceu da necessidade de transformar em palavras as múltiplas faces da existência.
Aqui, o leitor encontrará versos que falam de tristeza e felicidade, de amor e paixão, da vida e da morte.
É um convite para passear pela alma humana, onde luz e sombra convivem, onde a dor se mistura ao encanto,
e onde sempre resta uma centelha de eternidade.
"""
story.append(Paragraph("Prefácio", styles['TitleStyle']))
story.append(Spacer(1, 0.3*inch))
story.append(Paragraph(prefacio, styles['PrefaceStyle']))
story.append(PageBreak())
Poemas completos (substitua pelos 50 poemas)
poemas = [
"No silêncio da noite fria,\nA lua observa minha agonia.\nSombras dançam na parede,\nSussurros da alma que não se mede.",
... até o 50º poema
]
Caminho das imagens (01.png a 50.png)
imagens = [f"/caminho/para/imagens/{str(i+1).zfill(2)}.png" for i in range(50)]
for i in range(50):
story.append(Spacer(1, 0.5inch))
story.append(Image(imagens[i], width=7inch, height=7inch))
story.append(Spacer(1, 0.3inch))
story.append(Paragraph(f"{poemas[i].replace('\n','
')}", styles['Poem']))
story.append(Image('/caminho/para/icone.png', width=0.4inch, height=0.4inch))
story.append(PageBreak())
Monta PDF com bordas
doc.build(story, onFirstPage=add_border, onLaterPages=add_border)
file_path