def __applyCanvasOptions(self, canvas, opts): for opt in opts: if opt == 'fillColor': canvas.setFillColor(opts[opt]) if opt == 'fontSize': canvas.setFontSize(opts[opt]) return canvas
def __call__(self, canvas, doc): canvas.saveState() w, h = canvas._pagesize font_size = random_integer_from_list(self.config['text']['font_size']) line_y = random_integer_from_list(self.config['text']['bottom_margin']) canvas.setFontSize(font_size) canvas.drawCentredString(w / 2, line_y, str(canvas.getPageNumber())) canvas.restoreState()
def centred_text(canvas, x, y, row, what): x_centre = x + size[0] / 2.0 canvas.saveState() for font_size in range(12, 5, -1): canvas.setFontSize(font_size) if canvas.stringWidth(what) < size[0]: break else: print("Warning: text", what, "too wide") offset = row * size[1] / 4.0 canvas.drawCentredString(x_centre, y + offset, what) canvas.restoreState()
def myFirstPage(self,canvas, doc): canvas.saveState() canvas.drawImage(STATICFILES_DIRS[0]+'escudo_transito.jpg',35, PAGE_HEIGHT-115) canvas.setLineWidth(1) canvas.line(10, 723, 600,723) canvas.setFont('Times-Roman',8) canvas.drawString(10,PAGE_HEIGHT-130, "MUNICIPIO DE LEON GUANAJUATO") canvas.drawString(10,PAGE_HEIGHT-142, "SECRETARIA DE SEGURIDAD PUBLICA") canvas.drawString(420,PAGE_HEIGHT-142, "INFORME DE CAPTURA DE INFRACCIONES") canvas.setFillColorRGB(1,0,0) canvas.setFontSize(18) canvas.setFontSize(10) canvas.setFillColorRGB(0,0,0) canvas.drawString(10,PAGE_HEIGHT-154, "DIRECCION GENERAL DE TRANSITO MUNICIPAL")
def myFirstPage(self,canvas, doc): canvas.saveState() canvas.drawImage(STATICFILES_DIRS[0]+'escudo_transito.jpg',35, PAGE_HEIGHT-115) canvas.setLineWidth(1) canvas.line(10, 723, 600,723) canvas.setFont('Times-Roman',8) canvas.drawString(10,PAGE_HEIGHT-130, "MUNICIPIO DE LEON GUANAJUATO") canvas.drawString(10,PAGE_HEIGHT-142, "SECRETARIA DE SEGURIDAD PUBLICA") canvas.drawString(420,PAGE_HEIGHT-142, "ACTA DE INFRACCION No T.") canvas.setFillColorRGB(1,0,0) canvas.setFontSize(18) folio=self.data.get('folio_infraccion',"") canvas.drawString(530,PAGE_HEIGHT-142, folio) canvas.setFontSize(10) canvas.setFillColorRGB(0,0,0) canvas.drawString(10,PAGE_HEIGHT-154, "DIRECCION GENERAL DE TRANSITO MUNICIPAL") canvas.setFont('Times-Roman',7.5) fundamento='Con fundamento en los artículos 16 de la Constitución Política de los Estados Unidos ' fundamento=fundamento + ' Mexicanos 4 de la Ley Orgánica Municipal para el Estado de Guanajuato1,2,3,4,fracción 1X 42,44 y 47 del' canvas.drawString(10,PAGE_HEIGHT-178, fundamento) canvas.drawString(10,PAGE_HEIGHT-190, "reglamento de Tránsito Municipal de Léon, Guanajuato se procede a levantar la presente.") canvas.drawString(330,PAGE_HEIGHT-190, "ACTA DE INFRACCION") #canvas.setFillColorRGB(0,0,0) #canvas.setFillColorCMYK(1,1,0,0) canvas.rect(10, 600, 583, 35) canvas.drawString(12,PAGE_HEIGHT -213, "EN LEON. Guanajuato, el suscrito") canvas.setFont('Times-Bold',7) canvas.drawString(170,PAGE_HEIGHT -213, "AGENTE") canvas.setFont('Times-Roman',7.5) canvas.drawString(250,PAGE_HEIGHT -213, "de nombre") canvas.setStrokeColorRGB(0,0,0) canvas.setLineWidth(1) canvas.line(300, 627, 430,627) canvas.setFont('Times-Bold',7) nombre=self.data.get('nombreAgente',"") canvas.drawString(300,PAGE_HEIGHT -213, nombre) canvas.setFont('Times-Roman',7.5) canvas.drawString(525,PAGE_HEIGHT -213, "adscrito a la") canvas.setFont('Times-Bold',7.5) canvas.drawString(12,PAGE_HEIGHT -222, "PRIMERA COMANDANCIA") canvas.drawString(130,PAGE_HEIGHT -222, "TURNO A") canvas.drawString(180,PAGE_HEIGHT -222, "DELEGACION PONIENTE") canvas.setFont('Times-Roman',7.5) canvas.drawString(280,PAGE_HEIGHT -222, " de la Direccion de Transito municipal de Leon Guanajuato como consta en la ") canvas.setFont('Times-Bold',7.5) canvas.drawString(525,PAGE_HEIGHT -222, "CREDENCIAL") cobro=self.data.get('noCobro',"") canvas.drawString(12,PAGE_HEIGHT -231, str(cobro)) canvas.setLineWidth(1) canvas.line(12, 609, 40,609) canvas.setFont('Times-Roman',7.5) canvas.drawString(45,PAGE_HEIGHT -231, "expedida por el titular de la Dependencia Municipal. con la cual me identifica. Siendo las") canvas.setFont('Times-Bold',7.5) hora=self.data.get('hora_infrac',"") canvas.drawString(318,PAGE_HEIGHT -231, hora) canvas.setLineWidth(1) canvas.line(318, 609, 337,609) canvas.setFont('Times-Roman',7.5) canvas.drawString(350,PAGE_HEIGHT -231, "Horas del dia") canvas.setFont('Times-Bold',7.5) canvas.drawString(398,PAGE_HEIGHT -231, "24") canvas.setLineWidth(1) canvas.line(395, 609, 407,609) canvas.setFont('Times-Roman',7) canvas.drawString(413,PAGE_HEIGHT -231, "del mes de") canvas.setFont('Times-Bold',7) canvas.drawString(453,PAGE_HEIGHT -231, "OCTUBRE") canvas.setLineWidth(1) canvas.line(450, 609, 493,609) canvas.setFont('Times-Roman',7.5) canvas.drawString(495,PAGE_HEIGHT -231, "Del año") canvas.setFont('Times-Bold',7.5) canvas.drawString(525,PAGE_HEIGHT -231, "2013") canvas.setFont('Times-Roman',7.5) canvas.drawString(12,PAGE_HEIGHT -240, "Hago constar que el conductor de vehiculo cuyos datos se especifican a continuacion:") canvas.rect(10, 575, 585, 10) canvas.rect(10, 495, 585, 80) canvas.setLineWidth(1) canvas.line(10, 565, 595,565) canvas.line(10, 555, 595,555) canvas.line(10, 545, 595,545) canvas.line(10, 535, 595,535) canvas.line(10, 525, 595,525) canvas.line(10, 515, 595,515) canvas.line(10, 505, 595,505) canvas.line(295, 495, 295,585) canvas.drawString(135,PAGE_HEIGHT -265, "Datos Personales") canvas.drawString(395,PAGE_HEIGHT -265, "Caracteristicas de Vehiculo") canvas.drawString(300,PAGE_HEIGHT -275, "Marca:") canvas.setFont('Times-Bold',7) self.LabelVehiculo(canvas) self.LabelConductor(canvas) vehiculo=self.data.get('vehiculo',"") if vehiculo !="": mar=vehiculo.get('marca',"") canvas.drawString(330,PAGE_HEIGHT -275, mar) vehiculo=self.data.get('vehiculo',"") sub=vehiculo.get('submarca',"") canvas.drawString(500,PAGE_HEIGHT -275, sub) #canvas.drawString(500,PAGE_HEIGHT -275, "PICK UP") canvas.setFont('Times-Roman',7) #canvas.drawString(500,PAGE_HEIGHT -275, "Camioneta") canvas.setFont('Times-Bold',7) modelo=vehiculo.get('modelo',"") canvas.drawString(340,PAGE_HEIGHT -285, modelo) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) color=vehiculo.get('color',"") canvas.drawString(470,PAGE_HEIGHT -285, color) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) placas=vehiculo.get('placas',"") canvas.drawString(340,PAGE_HEIGHT -295, placas) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) serie=vehiculo.get('serie',"") canvas.drawString(470,PAGE_HEIGHT -295, serie) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) empresa=vehiculo.get('empresa',"") canvas.drawString(360,PAGE_HEIGHT -305, empresa) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) tipo_vehiculo=vehiculo.get('tipo_vehiculo',"") canvas.drawString(500,PAGE_HEIGHT -305, tipo_vehiculo) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) estado=vehiculo.get('estado',"") canvas.drawString(53,PAGE_HEIGHT -325, estado) canvas.setFont('Times-Bold',7) empresa=vehiculo.get('empresa',"") canvas.drawString(360,PAGE_HEIGHT -325, empresa) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) ruta=vehiculo.get('ruta','') canvas.drawString(500,PAGE_HEIGHT -325, ruta) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) sub=vehiculo.get('no_economico',"") canvas.drawString(370,PAGE_HEIGHT -335, sub) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) no_tarjeton=vehiculo.get('no_tarjeton',"") canvas.drawString(400,PAGE_HEIGHT -345, no_tarjeton) infractor=self.data.get('infractor',"") if infractor !="": canvas.setFont('Times-Bold',7) nombre=infractor.get('nombre',"") canvas.drawString(57,PAGE_HEIGHT -285, nombre) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) edad=infractor.get('edad',"") canvas.drawString(57,PAGE_HEIGHT -295, edad) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) sexo=infractor.get('sexo',"") canvas.drawString(170,PAGE_HEIGHT -295, sexo) canvas.setFont('Times-Bold',7) domicilio=infractor.get('domicilio',"") canvas.drawString(53,PAGE_HEIGHT -305, domicilio) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) sub=infractor.get('colonia',"") canvas.drawString(53,PAGE_HEIGHT -315, sub) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) ciudad=infractor.get('ciudad',"") canvas.drawString(170,PAGE_HEIGHT -325, ciudad) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) no_licencia=infractor.get('no_licencia',"") canvas.drawString(120,PAGE_HEIGHT -335, no_licencia) """ ## ESTO DEBE DE ESTAR EN ALGUN LADO tipo_servicio=self.data.get('tipo_servicio',"") canvas.drawString(395,PAGE_HEIGHT -315, tipo_servicio) canvas.setFont('Times-Roman',7) canvas.setFont('Times-Roman',7) canvas.drawString(12,PAGE_HEIGHT -345, "Tipo de Operativo:") canvas.setFont('Times-Bold',7) sub=self.data.get('tipo_operativo',"") canvas.drawString(100,PAGE_HEIGHT -345, sub) canvas.setFont('Times-Roman',7) canvas.drawString(12,PAGE_HEIGHT -355, "Quien en estos Momentos") canvas.setFont('Times-Bold',7) sub=self.data.get('firmo',"") canvas.drawString(100,PAGE_HEIGHT -355, sub) canvas.setFont('Times-Roman',7) canvas.drawString(116,PAGE_HEIGHT -355, "se encuentra presente, cometio flagrantemente infraccion a los articulo(s) que se detalla(n) a continuacion") canvas.setLineWidth(2) ##canvas.rect(10, 440, 585, 35) canvas.setLineWidth(1) canvas.line(180, 440, 180,476) canvas.drawString(12,PAGE_HEIGHT -374, "Reglamento de Transito para") canvas.drawString(12,PAGE_HEIGHT -380, "el municipio de Leon, Guanajuato") canvas.drawString(190,PAGE_HEIGHT -378, "Descripcion de los Motivos de la infraccion") canvas.setFont('Times-Roman',7) canvas.setFont('Times-Bold',7) dy=585 canvas.rect(10, dy, 585, 45) canvas.drawString(12,PAGE_HEIGHT -dy, " Hechos que ocurrieron en:") canvas.setFont('Times-Bold',7) calle=self.data.get('calle1',"") canvas.drawString(200,PAGE_HEIGHT -dy, calle) canvas.line(190, dy-1, 315,dy-1) canvas.setFont('Times-Roman',7) canvas.drawString(395,PAGE_HEIGHT -dy, "Con circulacion de:") canvas.setFont('Times-Bold',7) bar=self.data.get('circulacion',"") canvas.drawString(475,PAGE_HEIGHT -dy, bar) canvas.setFont('Times-Roman',7) canvas.drawString(200,PAGE_HEIGHT -(dy+9), " Calle BOULEVARD / AVENIDA") canvas.setFont('Times-Bold',7) bar=self.data.get('colonia',"") dy=dy+19 canvas.drawString(73,PAGE_HEIGHT -dy, bar) canvas.line(29, dy-40, 150,dy-40) canvas.setFont('Times-Roman',7) canvas.drawString(190,PAGE_HEIGHT -dy, "Referencia") canvas.setFont('Times-Bold',7) bar=self.data.get('referencia',"") canvas.drawString(320,PAGE_HEIGHT -dy, bar) canvas.line(250, dy-40, 400,dy-40) canvas.setFont('Times-Roman',7) canvas.drawString(23,PAGE_HEIGHT-450, "FRACCIONAMIENTO COLONIA COMUNIDAD") canvas.drawString(250,PAGE_HEIGHT-450, "SENALAR FRENTE A QUE NUMERO ENTRE QUE CALLE U OTRO PUNTO DE REFERENCIA") canvas.drawString(12,PAGE_HEIGHT-455, "Ubicacion de senalamiento vial (en los casos que proceda)") canvas.drawString(12,PAGE_HEIGHT-480, "Con fundamento en lo dispuesto por el articulo 44 del reglamento de Transito Municipalde Leon Guanajuato para garantizar el cumplimiento de la sancion administrativa que") canvas.drawString(12,PAGE_HEIGHT -490, "en su caso se proceda, SE RETIENE AL INFRACTOR:") se_recoje=self.data.get('se_recoje',"") if se_recoje.get('tipo',"") == 'PLACAS': canvas.drawString(45,PAGE_HEIGHT -498, "X") canvas.drawString(12,PAGE_HEIGHT -498, "PLACAS ( )") if se_recoje.get('tipo',"") == 'TARJETA DE CIRCULACION': canvas.drawString(190,PAGE_HEIGHT -498, "X") canvas.drawString(95,PAGE_HEIGHT -498, "TARJETA DE CIRCULACION ( )") if se_recoje.get('tipo',"") == 'LICENCIA': canvas.drawString(253,PAGE_HEIGHT -498, "X") canvas.drawString (215,PAGE_HEIGHT -498,"LICENCIA ( )") if se_recoje.get('tipo',"") == 'VEHICULO': canvas.drawString(360,PAGE_HEIGHT -498, "X") canvas.drawString(320,PAGE_HEIGHT -498, "VEHICULO ( )") if se_recoje.get('tipo',"") == 'CORTESIA': canvas.drawString(460,PAGE_HEIGHT -498, "X") canvas.drawString(420,PAGE_HEIGHT -498, "CORTESIA ( )") if se_recoje.get('tipo',"") == 'PAGO MOVIL': canvas.drawString(570,PAGE_HEIGHT -498, "X") canvas.drawString(520,PAGE_HEIGHT -498, "PAGO MOVIL ( )") canvas.rect(10, 266, 585, 45) canvas.drawString(12,PAGE_HEIGHT -538, "En caso de violacion al articulo 36 del Reglamento de Transito Municipal deLeon, Guanajuato se remitio al conductor ante el Medico legista qien a traves del CERTIFICADO MEDICO") canvas.drawString(12,PAGE_HEIGHT -546, "NUMERO determino que ") print self.data ## LA CERTIFICACION NO ESTA EN ESTE MOMENTO certificado=self.data.get('certificado',"") if certificado['ebriedad_incompleta'] == 'si': canvas.drawString(105,PAGE_HEIGHT -554, "X" ) canvas.drawString(15,PAGE_HEIGHT -554, "EBRIEDAD INCOMPLETA ( )" ) if certificado['ebriedad_completa'] == 'si': canvas.drawString(200,PAGE_HEIGHT -554, "X" ) canvas.drawString(120,PAGE_HEIGHT -554, "EBRIEDAD COMPLETA ( )" ) if certificado['influjo_droga'] == 'si': canvas.drawString(315,PAGE_HEIGHT -554, "X") canvas.drawString(220,PAGE_HEIGHT -554, "BAJO INFLUJO DE DROGAS ( )") if certificado['aliento_alcoholico'] == 'si': canvas.drawString(423,PAGE_HEIGHT -554, "X") canvas.drawString(340,PAGE_HEIGHT -554, "ALIENTO ALCOHOLICO ( )") ## certificado=self.data.get('certificado',"") if certificado['normal'] == 'si': canvas.drawString(512,PAGE_HEIGHT -554, "X") canvas.drawString(450,PAGE_HEIGHT -554, "ESTADO NORMAL( )") canvas.drawString(12,PAGE_HEIGHT -562, "Se recoje el vehiculo infraccionado y se deposita en la pension autorizada que corresponda de conformidad a los(articulos) del reglamento de Transito Municipal de Leon Guanajuato.") canvas.drawString(12,PAGE_HEIGHT -570, "15 Ultimo parrafo( )") canvas.drawString(120,PAGE_HEIGHT -570, "18 Tercer y Cuarto Parrafo( )") canvas.drawString(300,PAGE_HEIGHT -570, "36 Ultimo Parrafo") canvas.drawString(395,PAGE_HEIGHT -570, "44 ( )") canvas.drawString(470,PAGE_HEIGHT -570, "45 ( )") tam= PAGE_WIDTH/3 """ canvas.restoreState()
return "%s-%s: %s" % (start, end, e["summary"][:45]) def add_weather_info(canvas, x, y, weather_location): try: import pywapi except ImportError: return None try: weather_info = pywapi.get_weather_from_google(weather_location) except Exception, e: return None canvas.setFontSize(10) canvas.drawString( x, y, u"Weather for %s" % (weather_info["forecast_information"]["city"], )) y -= 12 canvas.setFontSize(8) canvas.drawString( x, y, u"%s: %s, High %s° Low %s°" % (weather_info["forecasts"][0]["day_of_week"], weather_info["forecasts"][0]["condition"], weather_info["forecasts"][0]["high"], weather_info["forecasts"][0]["low"])) y -= 10 try:
return "%s-%s: %s" % (start, end, e["summary"][:45]) def add_weather_info(canvas, x, y, weather_location): try: import pywapi except ImportError: return None try: weather_info = pywapi.get_weather_from_google(weather_location) except Exception, e: return None canvas.setFontSize(10) canvas.drawString(x, y, u"Weather for %s" % (weather_info["forecast_information"]["city"],)) y -= 12 canvas.setFontSize(8) canvas.drawString( x, y, u"%s: %s, High %s° Low %s°" % ( weather_info["forecasts"][0]["day_of_week"], weather_info["forecasts"][0]["condition"], weather_info["forecasts"][0]["high"], weather_info["forecasts"][0]["low"], ), )
def generatePage(words, canvas: canvas.Canvas, page: PageSettings, title): """ :param words: matrix of words (rows * columns) :param canvas: PDF canvas :param meta: other information (e.g page title) :return: """ if page.landscape: (marginR, marginT, marginL, marginB) = page.margins (height, width) = page.pagesize titleX = marginT titleY = width - marginR else: (marginT, marginL, marginB, marginR) = page.margins (width, height) = page.pagesize titleX = marginL titleY = height - marginT # if page.title: # canvas.setFont("HatWordFont", page.titleFontSize) # canvas.drawString(titleX + page.titleIndent, titleY - page.titleHeight / 2, title) if page.landscape: canvas.rotate(90) canvas.translate(0, -height) gwidth = width - marginL - marginR gheight = height - marginT - marginB goriginx = marginL goriginy = marginB # if page.title: # if page.landscape: # gwidth -= page.titleHeight # else: # gheight -= page.titleHeight if page.cutGrid: canvas.setStrokeColor(black) # Large bold rectangle canvas.setLineWidth(0.4 * mm) canvas.rect(goriginx, goriginy, gwidth, gheight) # outer cutting lines: canvas.setLineWidth(0.3 * mm) canvas.line(0, goriginy, width, goriginy) canvas.line(0, goriginy + gheight, width, goriginy + gheight) canvas.line(goriginx, 0, goriginx, height) canvas.line(goriginx + gwidth, 0, goriginx + gwidth, height) # grid cellWidth = gwidth / page.columns cellHeight = gheight / page.rows canvas.setLineWidth(0.2 * mm) canvas.grid([goriginx + i * cellWidth for i in range(page.columns + 1)], [goriginy + j * cellHeight for j in range(page.rows + 1)]) # add words canvas.setFont("HatWordFont", page.fontSize) # As y starts at the end of the page, adjust for it and start from the top # (so that empty cells will placed be at bottom). yoffset = goriginy + cellHeight / 2 + cellHeight * (page.rows - 1) for row in words: xoffset = goriginx + cellWidth / 2 for word in row: # scale down font size for long words numlines = word.count(";") + 1 fontSize = page.fontSize while fontSize > 0 and max( canvas.stringWidth(w, fontSize=fontSize) for w in word.split(";")) >= cellWidth - 2 * page.wordMargin - 0.5: fontSize -= 1 canvas.setFontSize(fontSize) # Somewhat cheap guess on string height : fontsize / 2 yoff = yoffset + fontSize * numlines * 0.65 - fontSize / 2 # print("99999999", word) flag = False for i in word.split(";"): print(i) if (flag): yoff -= fontSize * 1.1 if (i[:5] == "Место"): flag = True else: flag = False if (i == word.split(";")[0]): canvas.setFont("HatWordFontBold", page.titleFontSize) canvas.setFontSize(fontSize) canvas.drawCentredString(xoffset, yoff, i) yoff -= fontSize * 1.1 else: canvas.drawString(xoffset - cellWidth / 2 + 10, yoff, i) if (i == word.split(";")[0]): canvas.setFont("HatWordFont", page.titleFontSize) canvas.setFontSize(fontSize) yoff -= fontSize * 1.1 xoffset += cellWidth yoffset -= cellHeight