from fpdf import *

class PDF(FPDF):
	#Load data
	def load_data(self, name):
		#Read file lines
		data=[]
		for line in file(name):
			data += [line[:-1].split(';')]
		return data

	#Simple table
	def basic_table(self,header,data):
		#Header
		for col in header:
			self.cell(40,7,col,1)
		self.ln()
		#Data
		for row in data:
			for col in row:
				self.cell(40,6,col,1)
			self.ln()

	#Better table
	def improved_table(self,header,data):
		#Column widths
		w=[40,35,40,45]
		#Header
		for i in range(0,len(header)):
			self.cell(w[i],7,header[i],1,0,'C')
		self.ln()
		#Data
		for row in data:
			self.cell(w[0],6,row[0],'LR')
			self.cell(w[1],6,row[1],'LR')
			self.cell(w[2],6,row[2],'LR',0,'R')
			self.cell(w[3],6,row[3],'LR',0,'R')
			self.ln()
		#Closure line
		self.cell(sum(w),0,'','T')

	#Colored table
	def fancy_table(self,header,data):
		#Colors, line width and bold font
		self.set_fill_color(255,0,0)
		self.set_text_color(255)
		self.set_draw_color(128,0,0)
		self.set_line_width(.3)
		self.set_font('','B')
		#Header
		w=[40,35,40,45]
		for i in range(0,len(header)):
			self.cell(w[i],7,header[i],1,0,'C',1)
		self.ln()
		#Color and font restoration
		self.set_fill_color(224,235,255)
		self.set_text_color(0)
		self.set_font('')
		#Data
		fill=0
		for row in data:
			self.cell(w[0],6,row[0],'LR',0,'L',fill)
			self.cell(w[1],6,row[1],'LR',0,'L',fill)
			self.cell(w[2],6,row[2],'LR',0,'R',fill)
			self.cell(w[3],6,row[3],'LR',0,'R',fill)
			self.ln()
			fill=not fill
		self.cell(sum(w),0,'','T')

pdf=PDF()
#Column titles
header=['Country','Capital','Area (sq km)','Pop. (thousands)']
#Data loading
data=pdf.load_data('countries.txt')
pdf.set_font('Arial','',14)
pdf.add_page()
pdf.basic_table(header,data)
pdf.add_page()
pdf.improved_table(header,data)
pdf.add_page()
pdf.fancy_table(header,data)
pdf.output('tuto5.pdf','F')
