febrero 01, 2014

ReportLab: pdfgen - Objeto de texto (04)

Al usar canvas.drawstring, nos vemos limitados a dibujar de forma lineal el texto, y si el texto es demasiado largo, no se mostrará en todo la página. Además, hay oportunidades en que nuestro texto lo tenemos en un archivo, talvez un txt. En esos casos se puede usar objectText.

Veamos el siguiente código que lo explica (se usa un archivo llamado lorem.txt, que contiene un párrafo de Lorem Ipsum:


# -*- coding:utf-8 -*-
import os
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas

c=canvas.Canvas("test.pdf", pagesize = A4)

#FUENTES EN CANVAS
#-----------------
texto = "Lorem ipsum dolor sit amet"
x, y = 150, 710
for fuente in c.getAvailableFonts():  # Lista disponible de fuentes
    c.setFont(fuente, 10)  # Cambiamos la fuente y el tamaño
    c.drawString(x, y, texto)
    c.setFont("Helvetica", 12) 
    c.drawRightString(x-10, y, fuente + ":")
    y -= 20
 
#TRABAJANDO CON OBJETO DE TEXTO
#-------------------------------
# Indispensable para textos de varias lineas, ya que el método drawString 
# no podrá dibujar múltiples líneas:
textoArchivo = open("lorem.txt", "r")  # Abrimos un archivo de texto
texto = """Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumyeirmod tempor invidunt ut labore et dolore magna 
aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores 
et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem 
ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, 
sed diamvoluptua. At vero eos et accusam et justo duo dolores et ea reb""" 
 
textobject = c.beginText()  # Iniciamos el textobject
textobject.setTextOrigin(20, 400)  # Ubicamos el cursor donde dibujar
textobject.setFont("Helvetica-Oblique", 13)
for i in textoArchivo:
    i = i.replace("\n","")  # Remplazamos el salto de linea
    textobject.setCharSpace(0.5)  # Espacio entre caracteres 
    textobject.setWordSpace(1)  # Espacio entre palabras
    textobject.textLine(i)  # Dibujamos la linea
    textobject.moveCursor(5, 10)  # Movemos el cursor para luego escribir
textobject.setFillGray(0.4)  # Rellenamos con Escala de grises
textobject.setLeading(20)  # Espaciado entre lineas
textobject.textLines(texto)  # Insertamos el texto y con color gris
c.drawText(textobject)  # Dibujamos el texto pasando un objeto de texto
 
c.showPage()  

c.save()
os.system("test.pdf")

1 comentario:

  1. si el texto simplemente es largo y no tiene saltos (es decir solo una linea) que se puede hacer en ese caso para que una cierta cantidad de caractares salte una linea?

    ResponderEliminar