PDF de programación - Introducción ficheros PDF en Python

Imágen de pdf Introducción ficheros PDF en Python

Introducción ficheros PDF en Pythongráfica de visualizaciones

Publicado el 20 de Mayo del 2018
1.155 visualizaciones desde el 20 de Mayo del 2018
150,3 KB
4 paginas
Creado hace 11a (21/11/2012)
M4. Introducción Ficheros PDF en Phyton

Para crear archivos pdf con Python utilizaremos el conjunto de librerías Opensource de
ReportLab.

1. Obviamente se necesita tener Python instalado, y en caso de que deseemos incluir imágenes
debemos de instalar la Librería de Imágenes de Python (Python Imaging Library).

# apt-get install python-imaging

2. Luego nos dirigimos a la web de ReportLAb y descargamos el archivo .tar, descomprimimos e
instalamos:

# wget http://www.reportlab.com/ftp/reportlab-daily-unix.tar.gz
# tar zxvf report-dayli-unix.tar.gz
# cd reportlab-2012xxxxxxxxxx
# python setup.py install

3. Una vez instalado, podemos realizar una prueba sencilla probandopdf.py:

import os
from reportlab.pdfgen import canvas

def helloWorld(c):



c.drawString(250,420,"Ubicado en el centro?")
c.drawString(0,0,"Hola Mundo")

c = canvas.Canvas("HolaMundo.pdf")

helloWorld(c)
c.showPage()
c.save()

os.system(“/usr/bin/evince HolaMundo.pdf”)

4. Y al ejecutar el código anterior, deberímos de obtener un documento pdf en el directorio. La
última línea permitiría además lanzar un lector para leerlo. Similar a esto:

codigo ejemplo de un informe con reportlab en python

#!/usr/bin/python

#--------------------------------------------------------------------
# Fichero: informe.py
# Objetivo: Hacer un informe con los resultados de la encuesta
# --------------------------------------------------------
#------------------------------------------------
# Variables del programa. Autor: Pedro Reina
#------------------------------------------------
# El archivo con la base de datos
Origen = "encuesta.db"
# El PDF para imprimir
Destino = "informe.pdf"
# Consultas a la base de datos
ConsultaPregunta = "SELECT * FROM pregunta"
ConsultaPlazo = "SELECT * FROM plazo ORDER BY limite"
# Primera linea del documento
Titulo = "Encuesta"
# Los márgenes de la página, en centímetros
MargenIzquierdo = 2
MargenSuperior = 2
# La distancia entre líneas de texto, en centímetros
Interlineado = 0.75
#------------------------------------------------
# Módulos necesarios
#------------------------------------------------
# Another Python SQLite Wrapper
import apsw
# Matemáticas
import math
# Creación de PDF con ReportLab
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.lib.pagesizes import A4
from reportlab.graphics.shapes import Drawing, colors
from reportlab.graphics.charts.barcharts import VerticalBarChart
from reportlab.platypus import *
from reportlab.lib.styles import getSampleStyleSheet
#------------------------------------------------
# Funciones
#------------------------------------------------
#------------------------------------------------
# El programa
#------------------------------------------------
# Informamos al usuario
print "Origen: " + Origen
print "Destino: " + Destino
print "Preparando..."

# Abrimos conexión a la base de datos y creamos el curso con la conexión
Conexion = apsw.Connection (Origen)
Cursor = Conexion.cursor()
# Conversión de medidas: todas las hemos pedido en cm
# pero se usan en puntos tipográficos
MargenIzquierdo *= cm
MargenSuperior *= cm
Interlineado *= cm
# Preparamos el PDF
Pdf = canvas.Canvas (Destino, pagesize=A4)
Pdf.setAuthor ("Pedro Reina")
Pdf.setTitle ("Informe de encuesta")
# Guardamos las dimensiones de la página
Anchura, Altura = A4
# Preparamos el estilo de los párrafos con el texto de la pregunta
ListaEstilos = getSampleStyleSheet()
Estilo = ListaEstilos['BodyText']
Estilo.fontSize = 12
# Consultamos los límites del plazo de la consulta
Registro = 1
for Fila in Cursor.execute (ConsultaPlazo):
if ( Registro == 1 ):
Inicio = Fila[0]
Registro = 2
else:
Final = Fila[0]
# Preparamos el título
Titulo += " de " + Inicio + " a " + Final
# Leemos los registros
Registro = 1
for Fila in Cursor.execute (ConsultaPregunta):
# Tomamos los campos del registro
Texto = Fila[0]
R1 = Fila[1]
R2 = Fila[2]
R3 = Fila[3]
R4 = Fila[4]
R5 = Fila[5]
# Corrección de tags
Texto = Texto.replace ("<B>", "<b>")
Texto = Texto.replace ("</B>", "</b>")
# Numeramos las preguntas
Texto = str(Registro) + ". " + Texto
# Cálculos estadísticos
Maximo = max (R1, R2, R3, R4, R5)
NumRespuestas = R1 + R2 + R3 + R4 + R5
Media = float (R1 + 2*R2 + 3*R3 + 4*R4 + 5*R5) / NumRespuestas
DesvTipica = math.sqrt (float (R1 + 4*R2 + 9*R3 + 16*R4 + 25*R5) \
/ NumRespuestas - Media*Media)
Media = round (Media, 1)
DesvTipica = round (DesvTipica, 1)

# Descripción de la estadística
Estadistica = "Respuestas: " + str (NumRespuestas) + ". " + \
"Media: " + str (Media) + ". " + \
u"Desviación típica: " + str (DesvTipica)
# Vamos a imprimir dos preguntas por página
# Esta variable indica la posición inicial de dibujo de la
# pregunta en la página
if ( Registro % 2 == 1 ):
Base = 0
else:
Base = - Altura / 2
# Posición inicial de las líneas escritas
Linea = Base + Altura - MargenSuperior
# Escribimos los textos
Pdf.setFont ("Helvetica", 12)
Pdf.drawString (MargenIzquierdo, Linea, Titulo)
Linea -= Interlineado
Parrafo = Paragraph (Texto, Estilo)
AnchuraParrafo, AlturaParrafo = \
Parrafo.wrapOn (Pdf, Anchura - 2 * MargenIzquierdo, Altura)
Linea -= AlturaParrafo
Parrafo.drawOn (Pdf, MargenIzquierdo, Linea)
Linea -= Interlineado
Pdf.drawString (MargenIzquierdo, Linea, Estadistica)
# El diagrama de barras
Dibujo = Drawing (400, 200)
Datos = [ (R1, R2, R3, R4, R5) ]
Diagrama = VerticalBarChart()
Diagrama.x = 50
Diagrama.y = 50
Diagrama.height = 140
Diagrama.width = 300
Diagrama.data = Datos
Diagrama.bars[0].fillColor = colors.gray
Diagrama.barLabelFormat = '%d'
Diagrama.barLabels.dy = 8
Diagrama.valueAxis.valueMin = 0
Diagrama.valueAxis.valueMax = max (Maximo, 1)
Diagrama.valueAxis.valueStep = max (Maximo/4, 1)
Diagrama.categoryAxis.labels.dy = -2
Diagrama.categoryAxis.categoryNames = ['1','2','3','4','5']
Dibujo.add (Diagrama)
Dibujo.drawOn (Pdf, 100, Base+520-AlturaParrafo)
# Fin de página
if ( Registro % 2 == 0 ):
Pdf.showPage()
Registro += 1
# Escribimos el PDF
Pdf.save()
# Cerramos la conexión
Conexion.close (True)
# Informamos al usuario
print "Terminado."
  • Links de descarga
http://lwp-l.com/pdf11127

Comentarios de: Introducción ficheros PDF en Python (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad