You are on page 1of 4

Ejemplo Mnimo

Empecemos con el ejemplo clsico: from pyfpdf import FPDF


pdf=FPDF() pdf.add_page() pdf.set_font('Arial','B',16) pdf.cell(40,10,'Hola Mundo!') pdf.output('tuto1.pdf','F')

Demo Luego de incluir la biblioteca, creamos un objeto FPDF. El constructor FPDF es usado aqui con los valores predeterminados: pginas en A4 portrait -vertical- y la unidad de medida en milimetros. Podra haberlos especificado explicitamente: pdf=FPDF('P','mm','A4') Es posible usar landscape -apaisado- (L), otros formatos de pgina (como Letter -carta- y Legal oficio-) y nidad de medida (pt, cm, in). Por el momento no hay una pgina, entonces tenemos que agregar una con AddPage. El origen es la esquina superior-izquierda y la posicin actual est ubicada a 1 cm de los bordes; los margenes pueden ser cambiados con SetMargins. Antes de que podmos imprimir texto, es obligatorio seleccionar una fuente con SetFont, de lo contrario el documento ser invlido. Elegimos Arial bold 16: pdf.set_font('Arial','B',16) Podramos haber especificado italic -cursiva- con I, underline -subrayado- con U o fuente regular con string vacio (o cualquier combinacin). Noar que el tamao de la fuente es dado en puntos, no milimetros (u otra unidad de medida del usuario); esta es la nica excepcin. Las otras fuentes estndar son Times, Courier, Symbol y ZapfDingbats. Podemos ahora imprimir una celda con Cell. Una celda es un rea rectangular, posiblemente enmarcada, que contiene algn texto. Se imprime en la posicin actual. Especificamos sus dimensiones, su texto (centrado o alineado), si los bordes deberan ser dibujados, y donde la posicin actual se mueve despus (a la derecha, abajo o al principio de la prxima linea). Para agregar un marco, haremos: pdf.cell(40,10,'Hola mundo !',1) Para agregar una nueva celda prxima a ella con texto centrada y luego ir a la siguiente lnea, haramos: pdf.cell(60,10,'Hecho con FPDF.',0,1,'C') Nota: el salto de lnea puede hacerse tambin con Ln. Este mtodo permite especificar adicionalmente la altura del salto. Finalmente, el documento es cerrado y enviado al explorador con Output. Podemos haberlo grabado a un fichero al pasarle el nombre de archivo. Precaucin: en caso cuando el PDF es enviado al explorador, nada ms debe ser envido a la salida, ni antes ni despus (el mnimo caracter importa).

Encabezado, pie de pgina, salto de pgina e imagen

Aqu hay un ejemplo de dos pginas con encabezado, pie y logo: from pyfpdf import FPDF
class PDF(FPDF): def header(this): # Logo this.image('logo_pb.png',10,8,33) # Arial bold 15 this.set_font('Arial','B',15) # Move to the right this.cell(80) # Title this.cell(30,10,'Title',1,0,'C') # Line break this.ln(20) # Page footer def footer(this): # Position at 1.5 cm from bottom this.set_y(-15) # Arial italic 8 this.set_font('Arial','I',8) # Page number this.cell(0,10,'Page '+str(this.PageNo())+'/{nb}',0,0,'C') # Instanciation of inherited class pdf=PDF() pdf.alias_nb_pages() pdf.add_page() pdf.set_font('Times','',12) for i in range(1,41): pdf.cell(0,10,'Printing line number '+str(i),0,1) pdf.output('tuto2.pdf','F')

Demo Este ejemplo hace uso de mtodos Header y Footer para procesar el encabezado y pie. Son llamados automticamente. Ya existen en la clase FPDF pero no hacen nada, por lo tanto tenemos que extender la clase y sobre escribirlos. El log es impreso con el mtodo Image especificando su esquina superior izquierda y su ancho. La altura es calculada automticamente para respetar las proporciones de la imgen. Para imprimir el nmero de pgina, un valor nulo es pasado como ancho de celda. Significa que la celda deber ser extendida hasta el margen derecho de la pgina; es til centrar texto. El nmero de pgina actual es devuelto por el mtodo PageNo; y para el nmero total de pginas, ser obtenido mediante el valor especial {nb} que ser sustituido al cerrar el documento (si de antemano se llam AliasNbPages). Notar el uso del mtodo SetY que permite establecer la posicin en una ubicacin absoluta en la pgina, empezando desde arriba hacia abajo. Otra caracterstica interesante es usada aqu: el salto de pgina automtico. Tan pronto una celda cruza el lmite de una pgina (por defecto a 2 centimetros desde abajo), un salto es realizado y la fuente es restaurada. Aunque el encabezado y pie de pgina tienen su propia fuente (Arial), el cuerpo continua en Times. Este mecanismo de restauracin automtica tambien se aplica a los colores y el ancho de la lnea. El lmite que dispara los saltos de pgina puede establecerce con SetAutoPageBreak.

Saltos de lnea y colores


Continuemos con un ejemplo que imprime parrafos justificados. Tambin ilustra el uso de colores.

from fpdf import FPDF title='20000 Leagues Under the Seas' class PDF(FPDF): def header(self): #Arial bold 15 self.set_font('Arial','B',15) #Calcular ancho del texto (title) y establecer posicin w=self.get_string_width(title)+6 self.set_x((210-w)/2) #Colores del marco, fondo y texto self.set_draw_color(0,80,180) self.set_fill_color(230,230,0) self.set_text_color(220,50,50) #Grosor del marco (1 mm) self.set_line_width(1) #Titulo self.cell(w,9,title,1,1,'C',1) #Salto de lnea self.ln(10) def footer(self): #Posicin a 1.5 cm desde abajo self.set_y(-15) #Arial italic 8 self.set_font('Arial','I',8) #Color de texto en gris self.set_text_color(128) #Numero de pagina self.cell(0,10,'Page '+str(self.page_no()),0,0,'C') def chapter_title(self,num,label): #Arial 12 self.set_font('Arial','',12) #Color de fondo self.set_fill_color(200,220,255) #Titulo self.cell(0,6,"Chapter %d : %s"%(num,label),0,1,'L',1) #Salto de lnea self.ln(4) def chapter_body(self,name): #Leer archivo de texto txt=file(name).read() #Times 12 self.set_font('Times','',12) #Emitir texto justificado self.multi_cell(0,5,txt) #Salto de lnea self.ln() #Mencin en italic -cursivaself.set_font('','I') self.cell(0,5,'(end of excerpt)') def print_chapter(self,num,title,name): self.add_page() self.chapter_title(num,title) self.chapter_body(name) pdf=PDF() pdf.set_title(title) pdf.set_author('Jules Verne') pdf.print_chapter(1,'A RUNAWAY REEF','20k_c1.txt') pdf.print_chapter(2,'THE PROS AND CONS','20k_c2.txt') pdf.output('tuto3.pdf','F')

Demo El mtodo GetStringWidth permite determinar la longitud de una cadena en la fuente actual, usado aqu para calcular la posicin y el ancho del marco que rodea al ttulo. Los colores son establecidos (va SetDrawColor, SetFillColor y SetTextColor) y el grosor de la lnea es establecido a 1 mm (contra 0.2 por defecto) con SetLineWidth. Finalmente, emitimos la celda (el ltimo parmetro es True para indicar que el fondo debe ser rellenado). El mtodo usado para imprimir parrafos es MultiCell. Cada vez que una lnea alcanza el extremo derecho de la celda o un caracter de retorno de linea, un salto de lnea es emitido y una nueva celda es automticamente creada bajo la actual. El texto es justificado por defecto. Dos propiedades del documento son definidas: el ttulo (SetTitle) y el autor (SetAuthor). Las propiedades pueden ser vistas de dos formas. La primera es abrir el documento directamente con Acrobat Reader, ir al men Archivo y elegir la opcin Propiedades del Documento. La segunda, tambin disponible en el plug-in, es hacer click izquierdo y seleccionar Propiedades del documento (Document Properties).

You might also like