PyFPDF | Alexander A. E.
PyFPDF es una librería que genera documentos PDF mediante python. Es un port de FPDF, el cual está escrito en PHP.
Instalación:
pip install fpdf
Ejemplo
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:
- Importar el paquete
- Instanciar la clase FPDF
- Añadir una página
- Ajustar el valor de la tipografía
- Crear una celda con el texto 'Hola Mundo!'
- Imprimir el documento en el archivo 'tuto1.pdf'
Uso
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'
Ajustes adicionales:
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:
- auto: booleano que indica si se activa o no el salto de página.
- margin: distancia desde el tope inferior de la página a la que se activa el salto de línea.
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
- x, y: límite izquierdo superior
- w, h: ancho y alto
-
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:
- 'F': no dibuja los bordes del rectángulo
- 'FD' y 'DF': dibujan los bordes
- 'S': solo dibuja los bordes
-
Manejo de fuentes (tipos de letra):
add_font(family, style='', fname='', uni=False): importa una fuente para su futuro uso en nuestro documento.
- family: es el álias a utilizar para la fuente importada. Este valor es utilizado por set_font.
- style: valor sin uso, se mantiene por compatibilidad.
- fname: nombre del archivo fuente('DejaVuSansCondensed.ttf'). Es posible también, indicar la ruta completa. En ese caso se buscará el archivo en FPDF_FONTPATH or SYSTEM_TTFONTS (variables de entorno).
- uni: flag que indica si la fuente soporta valores unicode o no.
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.
- family: familia de la fuente, corresponde al nombre usado con el método add_font.
-
style: estilo de fuente, puede ser:
- cadena vacía(''): regular
- 'B': negrita
- 'I': Itálica o Cursiva
- 'U': Subrayado
- Cualquier combinación de las anteriores, por defecto se usa el estilo regular.
-
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.