Skip to content

Instantly share code, notes, and snippets.

@celiacintas
Created May 12, 2015 20:16
Show Gist options
  • Save celiacintas/a5a7b4af5b2b970cc78a to your computer and use it in GitHub Desktop.
Save celiacintas/a5a7b4af5b2b970cc78a to your computer and use it in GitHub Desktop.
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
from pyPdf import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from StringIO import StringIO
from os.path import basename, splitext
from reportlab.lib.pagesizes import letter
import os
import pandas as pd
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('Gothic', 'GOTHIC.TTF'))
def get_percentages(code):
df = pd.read_csv("bio_11_04.csv")
index = df[df['CODE'] == code].index.values
print df.ix[index, :]
packet = StringIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.setFont('Gothic', 14)
#print can.getAvailableFonts()
can.drawString(330, 445, '{0: >10}'.format(str(df.ix[index, 1].values[0])))
can.drawString(400, 445, '{0: >10}'.format(64.1))
can.drawString(330, 425, '{0: >10}'.format(str(df.ix[index, 2].values[0])))
can.drawString(400, 425, '{0: >10}'.format(163.6))
can.drawString(330, 405, '{0: >10}'.format(str(df.ix[index, 3].values[0])))
can.drawString(400, 405, '{0: >10}'.format(23.8))
can.drawString(330, 385, '{0: >10}'.format(str(df.ix[index, 4].values[0])))
can.drawString(400, 385, '{0: >10}'.format(35.5))
can.drawString(330, 365, '{0: >10}'.format(str(df.ix[index, 5].values[0])))
can.drawString(400, 365, '{0: >10}'.format(97.4))
can.drawString(330, 345, '{0: >10}'.format(str(df.ix[index, 6].values[0])))
can.drawString(400, 345, '{0: >10}'.format(84.0))
can.drawString(330, 320, '{0: >10}'.format(str(df.ix[index, 7].values[0])))
can.drawString(400, 320, '{0: >10}'.format(55.6))
can.save()
packet.seek(0)
text = PdfFileReader(packet)
return text
def add_image_text(image_path_10, image_path_11):
""" """
code = splitext(basename(image_path_10))[0]
packet = StringIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.setFont('Gothic', 12)
can.drawString(430, 606, 'CÓDIGO: {0}'.format(code))
can.save()
packet.seek(0)
text = PdfFileReader(packet)
page = PdfFileReader(file("AnthropometricReportZPE0000.pdf","rb")).getPage(0)
percentages = get_percentages(code)
page.mergePage(percentages.getPage(0))
page.mergePage(text.getPage(0))
# for the image pag 1
imgTemp = StringIO()
imgDoc = canvas.Canvas(imgTemp)
imgDoc.drawImage(image_path_10, 60, 160, 500, 450) ## x,y and size
imgDoc.save()
page_1 = PdfFileReader(file("AnthropometricReportZPE0000.pdf","rb")).getPage(1)
overlay = PdfFileReader(StringIO(imgTemp.getvalue())).getPage(0)
page_1.mergePage(overlay)
#page_1.mergePage(text.getPage(0))
# for the image pag 1
imgTemp = StringIO()
imgDoc = canvas.Canvas(imgTemp)
imgDoc.drawImage(image_path_11, 60, 200, 500, 350) ## x,y and size
imgDoc.save()
page_2 = PdfFileReader(file("AnthropometricReportZPE0000.pdf","rb")).getPage(2)
overlay = PdfFileReader(StringIO(imgTemp.getvalue())).getPage(0)
page_2.mergePage(overlay)
output = PdfFileWriter()
#nasty fix
output.addPage(page)
output.addPage(page_1)
output.addPage(page_2)
#output.addPage(PdfFileReader(file("AnthropometricReportZPE0000.pdf","rb")).getPage(2))
output.write(file("pdf_out_antro/AnthropometricReport{0}.pdf".format(code),"w"))
def main():
foldername_10 = '1/'
foldername_11 = '2/'
filenames_picture_10 = sorted(map(lambda f: os.path.join(foldername_10, f), os.listdir(foldername_10)))
filenames_picture_11 = sorted(map(lambda f: os.path.join(foldername_11, f), os.listdir(foldername_11)))
#print filenames_picture_11x
#print filenames_picture_10
for image_10, image_11 in zip(filenames_picture_10, filenames_picture_11):
if splitext(basename(image_10))[0] == splitext(basename(image_11))[0]:
add_image_text(image_10, image_11)
else:
print "faltan fotos", image_10, image_11
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment