Saltar al contenido

Python Reportlab PDF – Centrar texto en la página

Contamos con tu apoyo para compartir nuestros artículos referente a las ciencias de la computación.

Solución:

El lienzo de reportlab tiene un método drawCentredString. Y sí, lo escriben así.

¡Somos británicos, maldita sea, y estamos orgullosos de nuestra ortografía!

Editar: En cuanto a los objetos de texto, me temo que no. Sin embargo, puedes hacer algo en ese sentido:

from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.rl_config import defaultPageSize

PAGE_WIDTH  = defaultPageSize[0]
PAGE_HEIGHT = defaultPageSize[1]

text = "foobar foobar foobar"
text_width = stringWidth(text)
y = 1050 # wherever you want your text to appear
pdf_text_object = canvas.beginText((PAGE_WIDTH - text_width) / 2.0, y)
pdf_text_object.textOut(text) # or: pdf_text_object.textLine(text) etc.

Puedes usar otros tamaños de página, obviamente.

Solo necesitaba esto también, y escribí esto:

def createTextObject(canv, x, y, text, style, centered=False):
    font = (style.fontName, style.fontSize, style.leading)
    lines = text.split("n")
    offsets = []
    if centered:
        maxwidth = 0
        for line in lines:
            offsets.append(canv.stringWidth(line, *font[:2]))
        maxwidth = max(*offsets)
        offsets = [(maxwidth - i)/2 for i in offsets]
    else:
        offsets = [0] * len(lines)
    tx = canv.beginText(x, y)
    tx.setFont(*font)
    for offset, line in zip(offsets, lines):
        tx.setXPos(offset)
        tx.textLine(line)
        tx.setXPos(-offset)
    return tx

Puedes usar objetos fluidos como Paragraph y asignar alignment valor a 1:

styles = getSampleStyleSheet()
title_style = styles['Heading1']
title_style.alignment = 1
title = Paragraph("Hello Reportlab", title_style)
story.append(title)

Este ejemplo creará un documento pdf con texto centrado:

from flask import make_response
import io
from reportlab.platypus import SimpleDocTemplate, Paragraph
from reportlab.lib.styles import getSampleStyleSheet

story=[]
pdf_doc = io.BytesIO()
doc = SimpleDocTemplate(pdf_doc)

styles = getSampleStyleSheet()
title_style = styles['Heading1']
title_style.alignment = 1
title = Paragraph("Hello Reportlab", title_style)
story.append(title)
doc.build(story)

content = pdf_doc.getvalue()

#output to browser
response = make_response(content)
response.mimetype = 'application/pdf'
return response

Si desea que el texto flote a la izquierda, debe cambiar alignment a 0:

title_style.alignment = 0

Si desea que el texto flote a la derecha, debe cambiar alignment a 2:

title_style.alignment = 2

valoraciones y reseñas

Agradecemos que desees corroborar nuestro trabajo añadiendo un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *