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.


