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.