def getTOC(commune, pdfconfig, translations): toc_pages = ExtractPDF(commune, pdfconfig, translations) # START TOC toc_pages.add_page() toc_pages.set_margins(*pdfconfig.pdfmargins) toc_pages.set_y(40) toc_pages.set_font(*pdfconfig.textstyles['title3']) toc_pages.multi_cell(0, 12, translations['toclabel']) toc_pages.set_y(60) toc_pages.set_font(*pdfconfig.textstyles['bold']) toc_pages.cell(12, 15, '', '', 0, 'L') toc_pages.cell(118, 15, '', 'L', 0, 'L') toc_pages.cell(15, 15, '', 'L', 0, 'C') toc_pages.cell(15, 15, '', 'L', 1, 'C') toc_pages.cell(12, 5, translations['pagelabel'], 'B', 0, 'L') toc_pages.cell(118 ,5, translations['toclabel'], 'LB', 0, 'L') y = toc_pages.get_y() x = toc_pages.get_x() toc_pages.rotate(90) toc_pages.text(x-4, y+8, translations['legalprovisionslabel'].replace(' ', '\n')) toc_pages.text(x-4, y+23, translations['referenceslabel']) toc_pages.rotate(0) toc_pages.cell(15, 5, '', 'LB', 0, 'L') toc_pages.cell(15, 5, '', 'LB', 1, 'L') return toc_pages
def getTitlePage(feature_info, crdppf_wms, nomcom, commune, pdfconfig, translations): temp_path = pkg_resources.resource_filename('crdppf', 'static/public/temp_files/') # the dictionnary for the document reportInfo = {} reportInfo['type'] = '[officiel]' # the dictionnary for the parcel feature_info['no_EGRID'] = 'to be defined' #feature_info['lastUpdate'] = datetime.now() feature_info['operator'] = 'F.Voisard - SITN' today= datetime.now() # Create property highlight sld sld = u"""<?xml version="1.0" encoding="UTF-8"?> <sld:StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/ogc" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <sld:NamedLayer> <sld:Name>parcelles</sld:Name> <sld:UserStyle> <sld:Name>propertyIsEqualTo</sld:Name> <sld:Title>propertyIsEqualTo</sld:Title> <sld:FeatureTypeStyle> <sld:Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>idemai</ogc:PropertyName> <ogc:Literal>""" sld += str(feature_info['idemai']) sld += u"""</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <sld:PolygonSymbolizer> <sld:Stroke> <sld:CssParameter name="stroke">#ff0000</sld:CssParameter> <sld:CssParameter name="stroke-opacity">1</sld:CssParameter> <sld:CssParameter name="stroke-width">5</sld:CssParameter> </sld:Stroke> </sld:PolygonSymbolizer> <sld:TextSymbolizer> <sld:Label> <ogc:PropertyName>nummai</ogc:PropertyName> </sld:Label> <sld:Font> <sld:CssParameter name="font-family">pdfconfig.fontfamily</sld:CssParameter> <sld:CssParameter name="font-weight">bold</sld:CssParameter> <sld:CssParameter name="font-size">8</sld:CssParameter> </sld:Font> <sld:Fill> <sld:CssParameter name="fill">#000000</sld:CssParameter> </sld:Fill> </sld:TextSymbolizer> </sld:Rule> </sld:FeatureTypeStyle> </sld:UserStyle> </sld:NamedLayer> </sld:StyledLayerDescriptor>""" sldfile = open(temp_path+'sld_'+'siteplan'+'.xml', 'w') sldfile.write(sld) sldfile.close() layers = [ 'parcelles', 'mo22_batiments', 'mo21_batiments_provisoires', 'mo23_batiments_projetes', 'ag1_parcellaire_provisoire', 'mo9_immeubles', 'mo5_point_de_detail', 'mo7_obj_divers_lineaire', 'mo7_obj_divers_couvert', 'mo7_obj_divers_piscine', 'mo7_obj_divers_cordbois', 'mo4_pfa_1', 'mo4_pfp_3', 'mo4_pfp_1_2', 'la3_limites_communales', 'mo22_batiments' ] scale = feature_info['printFormat']['scale']*2 # SitePlan/Plan de situation/Situationsplan map_params = {'width':feature_info['printFormat']['mapWidth'],'height':feature_info['printFormat']['mapHeight']} map_params['bboxCenterX'] = (feature_info['BBOX']['maxX']+feature_info['BBOX']['minX'])/2 map_params['bboxCenterY'] = (feature_info['BBOX']['maxY']+feature_info['BBOX']['minY'])/2 #to recenter the map on the bbox of the feature, with the right scale and add at least 10% of space we calculate a wmsBBOX wmsBBOX = {} wmsBBOX['centerY'] = int(map_params['bboxCenterY']) wmsBBOX['centerX'] = int(map_params['bboxCenterX']) wmsBBOX['minX'] = int(wmsBBOX['centerX'] - (160*scale/1000/2)) wmsBBOX['maxX'] = int(wmsBBOX['centerX']+(160*scale/1000/2)) wmsBBOX['minY'] = int(wmsBBOX['centerY']-(90*scale/1000/2)) wmsBBOX['maxY'] = int(wmsBBOX['centerY']+(90*scale/1000/2)) #wms = WebMapService('http://sitn.ne.ch/mapproxy/service', version='1.1.1') wms = WebMapService(crdppf_wms, version='1.1.1') #layers = 'plan_ville_c2c' map = wms.getmap( layers=layers, sld = pdfconfig.sld_url + '/sld_' + 'siteplan' + '.xml', srs='EPSG:21781', bbox=(wmsBBOX['minX'],wmsBBOX['minY'],wmsBBOX['maxX'],wmsBBOX['maxY']), size=(1600,900), format='image/png', transparent=False ) out = open(temp_path + 'siteplan.png', 'wb') out.write(map.read()) out.close() mappath = temp_path + 'siteplan.png' # Create PDF extract pdf = ExtractPDF(commune, pdfconfig, translations) # START TITLEPAGE pdf.add_page() pdf.set_margins(*pdfconfig.pdfmargins) path = pkg_resources.resource_filename('crdppf', 'utils\\') # PageTitle pdf.set_y(45) pdf.set_font(*pdfconfig.textstyles['title1']) if reportInfo['type'] =='certified': pdf.multi_cell(0, 9, translations["certifiedextracttitlelabel"]) elif reportInfo['type'] =='reduced': pdf.multi_cell(0, 9, translations['reducedextracttitlelabel']) elif reportInfo['type'] =='reducedcertified': pdf.multi_cell(0, 9, translations['reducedcertifiedextracttitlelabel']) else: pdf.multi_cell(0, 9, translations['normalextracttitlelabel']) pdf.set_font(*pdfconfig.textstyles['title2']) #pdf.multi_cell(0, 7, translations['extractsubtitlelabel']) pdf.multi_cell(0, 7, translations['extractsubtitlelabel']) pdf.ln() map = pdf.image(temp_path+'siteplan.png', 25, 80, 160, 90) y=pdf.get_y() pdf.rect(25, 80, 160, 90, '') pdf.set_y(y+105) # First infoline pdf.set_font(*pdfconfig.textstyles['bold']) pdf.cell(45, 5, translations['propertylabel'], 0, 0, 'L') pdf.set_font(*pdfconfig.textstyles['normal']) if feature_info['nomcad'] is not None: pdf.cell(50, 5, feature_info['nummai'].encode('iso-8859-1')+str(' (')+feature_info['nomcad'].encode('iso-8859-1')+str(') ')+str(' - ')+feature_info['type'].encode('iso-8859-1'), 0, 1, 'L') else : pdf.cell(50, 5, feature_info['nummai'].encode('iso-8859-1'), 0, 1, 'L') # Second infoline : Area and EGRID pdf.set_font(*pdfconfig.textstyles['bold']) pdf.cell(45, 5, translations['propertyarealabel'], 0, 0, 'L') pdf.set_font(*pdfconfig.textstyles['normal']) pdf.cell(50, 5, str(feature_info['area'])+str(' m2').encode('iso-8859-1'), 0, 0, 'L') pdf.set_font(*pdfconfig.textstyles['bold']) pdf.cell(35, 5, translations['EGRIDlabel'], 0, 0, 'L') pdf.set_font(*pdfconfig.textstyles['normal']) pdf.cell(50, 5, feature_info['no_EGRID'].encode('iso-8859-1'), 0, 1, 'L') # Third infoline : Adresse/localisation pdf.set_font(*pdfconfig.textstyles['bold']) pdf.cell(45, 5, translations['addresslabel'], 0, 0, 'L') pdf.set_font(*pdfconfig.textstyles['normal']) pdf.cell(50, 5, str('Placeholder').encode('iso-8859-1'), 0, 1, 'L') # Fourth infoline : municipality and BFS number pdf.set_font(*pdfconfig.textstyles['bold']) pdf.cell(45, 5, translations['municipalitylabel']+str(' (')+translations['federalmunicipalitynumberlabel']+str(')'), 0, 0, 'L') pdf.set_font(*pdfconfig.textstyles['normal']) pdf.cell(50, 5, feature_info['nomcom'].encode('iso-8859-1')+str(' (')+str(feature_info['nufeco']).encode('iso-8859-1')+str(')'), 0, 0, 'L') # Creation date and operator y= pdf.get_y() pdf.set_y(y+10) pdf.set_font(*pdfconfig.textstyles['bold']) pdf.cell(45, 5, translations['extractoperatorlabel'], 0, 0, 'L') pdf.set_font(*pdfconfig.textstyles['normal']) pdf.cell(70, 5, feature_info['operator'].encode('iso-8859-1'), 0, 1, 'L') y= pdf.get_y() pdf.set_y(y+5) pdf.set_font(*pdfconfig.textstyles['bold']) pdf.cell(0, 5, translations['signaturelabel'], 0, 0, 'L') pdf.set_y(250) pdf.set_font(*pdfconfig.textstyles['bold']) pdf.cell(0, 5, translations['disclaimerlabel'], 0, 1, 'L') pdf.set_font(*pdfconfig.textstyles['normal']) pdf.multi_cell(0, 5, translations['disclaimer'], 0, 1, 'L') # END TITLEPAGE return pdf
def getAppendices(commune, pdfconfig, translations): appendix_pages = ExtractPDF(commune, pdfconfig, translations) # START APPENDIX appendix_pages.add_page() appendix_pages.set_margins(*pdfconfig.pdfmargins) appendix_pages.set_y(40) appendix_pages.set_font(*pdfconfig.textstyles['title3']) appendix_pages.multi_cell(0, 12, translations['appendiceslistlabel']) appendix_pages.set_y(60) appendix_pages.set_font(*pdfconfig.textstyles['bold']) appendix_pages.cell(15, 6, translations['pagelabel'], 0, 0, 'L') appendix_pages.cell(135, 6, translations['appendicestitlelabel'], 0, 1, 'L') return appendix_pages