El otro día salió publicado en el Blog de gvSIG un post de Joaquin del Cerro sobre como abrir un PDF en un visor dentro de gvSIG desde el módulo de scripting. Así que aprovechando la nueva opción de Dialog de la nueva build de gvSIG he decidido hacer un pequeño ejemplo que lo junte todo. También gracias a la ayuda de unos ejemplos realizados por Victor Acevedo.
Los que os lo habéis perdido podéis echar un vistazo a mi anterior post donde explico todo este nuevo apartado paso a paso.
El script consiste en una ventana que al seleccionar una entidad en la capa y hacer click sobre el botón de «Info» nos sacará toda la información de esa entidad en la caja de texto. Podéis ver que el botón de PDF se encuentra desactivado por ahora.
Además, si existe un campo llamado «PDF» haremos que se active el botón de PDF, y al presionarlo, nos abrirá el visor que os comentaba al PDF enlazado. Está todo muy simplificado para hacerlo más entendible.
El código correspondiente al dialog es:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- generated by ThinG, the Thinlet GUI editor --> <panel colspan="0" columns="1" gap="1" height="156" rowspan="3" scrollable="true" width="300"> <panel columns="2"> <label text="Info"/> </panel> <panel colspan="2" columns="2" rowspan="0" weightx="1" weighty="1"> <textarea colspan="2" columns="36" editable="false" halign="center" height="1" name="txtArea" rows="6" valign="center"/> </panel> <panel> <button action="verInfo" name="btnInfo" text="Info"/> <button action="verPDF" enabled="false" name="btnPDF" rowspan="2" text="PDF"/> </panel> </panel>
Y el código que ejecuta es:
from gvsig import * from org.gvsig.tools import ToolsLocator from org.gvsig.tools.swing.api import ToolsSwingLocator from java.net import URI def onload(*args): """Dialog info de entidad y abrir pdf""" global rutapdf rutapdf = "C://gvsig/testpuntos/" pass def verInfo(): #Accion del boton Info feature = iter(currentLayer().getSelection()).next() info = currentLayer().name schema = currentLayer().getSchema().getAttrNames() for sch in schema: info += "\n" + str(sch) + " " + str(feature.get(sch)) btnPDF = dialog.find("btnPDF") try: if feature.get("PDF"): dialog.setBoolean(btnPDF, "enabled", True) except: dialog.setBoolean(btnPDF, "enabled", False) txt = dialog.find("txtArea") dialog.setString(txt, "text", info) def verPDF(): #Accion del boton PDF feature = iter(currentLayer().getSelection()).next() name = feature.get("PDF") ruta = rutapdf + name visorPDF(ruta) def visorPDF(rutaAbsoluta): formatManagers = ToolsLocator.getExtensionPointManager().get("HyperLinkAction") pdfManager = formatManagers.get("PDF_format").create() panel = pdfManager.createPanel(URI("file:/"+rutaAbsoluta)) windowManager = ToolsSwingLocator.getWindowManager() windowManager.showWindow(panel,"Visor PDFs",windowManager.MODE.WINDOW)
Para cualquier duda me la podéis consultar en los comentarios o por email.