Full Stack Developer
PyFPDF es una librería que genera documentos PDF mediante python. Es un port de FPDF, el cual está escrito en PHP.
pip install fpdf
Tal y como se observa en el tutorial1, un ejemplo sencillo podría ser el siguiente:
::python
from fpdf import FPDF
pdf=FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hola Mundo!')
pdf.output('tuto1.pdf', 'F')
Lo que se hizo fue:
El objeto base FPDF() acepta los siguientes parámetros con los valores por defecto indicados:
orientation='P', unit='mm'y format='A4'
que corresponden a:
orientation: orientación del documento
'p' o 'portrait': vertical
'l' o 'landscape': horizontal
unit: unidades a usar 'pt': puntos 'mm': milimetros 'cm': centimetros 'in': pulgadas
recordando que: 1 pulgada equivale a 72 puntos2
format: formato de hoja, cuyos posibles valores son:
'a3', 'a4', 'a5', 'letter' y 'legal'
El objeto FPDF tiene un conjunto de métodos que nos permiten realizar ajustes adicionales al documento. Algunos de estos ajustes posibles son:
márgenes:
se permite ajustar los márgenes izquierdo, superior y derecho.
set_margins(left,top,right=-1)
set_left_margin(margin)
set_top_margin(margin)
set_right_margin(margin)
salto de página:
se refiere al salto de página para cuando se trabaja con celdas, multiceldas o imágenes. Si el objeto a imprimir se localiza por debajo del límite inferior, se crea una nueva hoja.
set_auto_page_break(auto, margin=0)
Parámetros:
tambien podríamos sobreescribir el método accept_page_break3 si es que usamos una clase que herede de FPDF.
zoom y vista de página:
el zoom y la vista de página por defecto se controlan4 por medio del método:
set_display_mode(zoom, layout=continuous)
El zoom acepta como valores a: fullpage, fullwidth o real.
La vista de página (layout) acepta como valores a: continuous, two o default.
compresión:
Habilita la compresión mediante zlib:
set_compression(compress)
compress: True o False
Título, Asunto, Autor, Palabras clave, Creador:
set_title(title) set_subject(subject) set_author(author) set_keywords(keywords) set_creator(creator)
Número de páginas:
Es posible definir un alias para el número total de páginascon el método:
alias_nb_pages(alias='{nb}')
Nueva página:
add_page(orientation='')
Encabezado y pie de página
header() y footer(): son dos métodos que permiten insertar el encabezado y pie de página. Ambos son llamados automáticamente al crear una nueva página por el método add_page(). Para ser utilizados debe de utilizarse una subclase de FPDF e implementar los métodos anteriores.
class PDF(FPDF):
def header(self):
# Tipo de fuente
self.set_font('Arial','B',15)
# Alineacion de 80 espacios
self.cell(80)
# Titulo
self.cell(30,10,'Title',1,0,'C')
# Salto de línea
self.ln(20)
Ajustes de colores y dibujo:
set_draw_color(r, g, b): color de trazos
set_fill_color(r, g, b): color de relleno
set_text_color(r, g, b): color de texto
set_line_width(width): ancho de linea
Lineas y figuras:
line(x1, y1, x2, y2): dibuja una línea
dashed_line(x1, y1, x2, y2, dash_length=1, space_length=1): dibuja una línea punteada, permite indicar la longitud de los guiones y el espacio entre ellos.
rect(x, y, w, h, style=''): dibuja un rectángulo
style: puede tomar los valores de 'F', 'FD', 'DF' y 'S'. Si bien en la documentación no encontré el qué hacia cada valor, por lo que pude probar:
Manejo de fuentes (tipos de letra):
add_font(family, style='', fname='', uni=False): importa una fuente para su futuro uso en nuestro documento.
por ejemplo:
# Añade una fuente unicode
pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True)
# Añade una fuente unicode del sistema, usando su ruta completa
pdf.add_font('sysfont', '', r'c:\WINDOWS\Fonts\arial.ttf', uni=True)
set_font(family, style='', size=0): Ajusta la fuente usada para imprimir los textos. Es necesario llamar a este método al menos una vez antes de imprimir textos o el documento resultante será inválido.
style: estilo de fuente, puede ser:
size: tamaño en puntos, el valor por defecto es 12.
por ejemplo:
# Times regular 12
pdf.set_font('Times')
# Arial bold 14
pdf.set_font('Arial','B',14)
# Se remueve el estilo 'negrita'
pdf.set_font('')
# Times en negrita, italica y subrayado con 14 puntos
pdf.set_font('Times','BIU')
set_font_size(size): ajusta el tamaño de la fuente usada
get_string_width(s): obtiene el ancho ocupado por el texto indicado en la fuente actual.