[Gvsig_usuarios] Imprimir PDF script
Joaquin Jose del Cerro Murciano
jjdelcerro en gvsig.org
Vie Abr 29 11:42:53 CEST 2016
Holas, de nuevo.
Estaba haciendo una prueba...
Si no quieres hilar tan fino como comenta Cesar, y lo unico que quieres es
poder especificar el fichero desde tu script y que vaya en gvSIG 2.2
podrias invocar directamente al metodo toPDF que comenta Cesar haciendo
algo como:
# ----------><------------><----
--------------------------------------
from gvsig import *
use_plugin("org.gvsig.app.document.layout2.app.mainplugin")
from java.io import File
from org.gvsig.app import ApplicationLocator
from org.gvsig.app.project.documents.layout import LayoutManager
def main(*args):
application = ApplicationLocator.getManager()
projectManager = application.getProjectManager()
layoutManager = projectManager.getDocumentManager(LayoutManager.TYPENAME)
layoutDoc = application.getActiveDocument(LayoutManager.TYPENAME)
# ojo, layoutDoc puede ser None
layoutWin = layoutManager.getMainWindow(layoutDoc, None)
layoutWin.getLayoutControl().getLayoutDraw().toPDF(File("/tmp/mapa.pdf"))
# ----------><------------><----
--------------------------------------
El 29 de abril de 2016, 11:28, C茅sar Mart铆nez Izquierdo <cesar.izq en gmail.com
> escribi贸:
> Hola Javier,
>
> Y si necesitas un resultado m谩s personalizado del que te comenta Joaqu铆n,
> puedes basarte en el c贸digo del m茅todo toPDF() de FLayoutDraw, que te pego
> debajo. B谩sicamente usa la clase PdfWriter de la librer铆a iText para crear
> el PDF en la ruta que se le pasa como par谩metro. Creo que te ser谩 bastante
> sencillo "traducirlo" a python.
>
> Saludos,
>
> C茅sar
>
>
>
> public void toPDF(File pdf) {
> Attributes attributes = layoutContext.getAttributes();
>
> double w = ((attributes.m_sizePaper.getWidth() *
> Attributes.DPISCREEN) / Attributes.PULGADA);
> double h = ((attributes.m_sizePaper.getHeight() *
> Attributes.DPISCREEN) / Attributes.PULGADA);
> Rectangle pageSize = new com.lowagie.text.Rectangle((float) w,
> (float) h);
> Document document = new Document(pageSize);
>
> try {
> FileOutputStream fos = new FileOutputStream(pdf);
> PdfWriter writer = PdfWriter.getInstance(document, fos);
> document.open();
>
> PdfContentByte cb = writer.getDirectContent();
> Graphics2D g2 = cb.createGraphicsShapes((float) w, (float) h);
>
> try {
> print(g2, new PageFormat(), 0);
> } catch (PrinterException e) {
> LOG.error("Error printing the map", e);
> }
> g2.dispose();
>
> } catch (DocumentException de) {
> LOG.error("Error printing the map", de);
> } catch (IOException ioe) {
> JOptionPane.showMessageDialog(
> (Component) PluginServices.getMainFrame(),
> ioe.getMessage());
> }
>
> document.close();
>
> layoutControl.fullRect();
> }
>
> 2016-04-29 11:20 GMT+02:00 Joaquin Jose del Cerro Murciano <
> jjdelcerro en gvsig.org>:
>
>>
>>
>> El 29 de abril de 2016, 8:48, Javier Gal谩n <javiergalans en gmail.com>
>> escribi贸:
>>
>>> Hola a todos.
>>>
>>> He hecho un script que configura un mapa con datos de una parcela
>>> seleccionada.
>>> Estoy intentando hacer que una vez termine lo imprima en pdf, pero no
>>> logro averiguar por donde ir.
>>>
>>> Alguien lo ha intentado antes?
>>>
>>>
>> Hola,
>> asi de forma rapida podrias hacer algo como:
>>
>> # ----------><------------><------------------------------------------
>> from gvsig import *
>>
>> from org.gvsig.andami import PluginsLocator
>>
>> def main(*args):
>>
>> actionManager = PluginsLocator.getActionInfoManager()
>> action = actionManager.getAction("application-export-to-pdf")
>> action.execute()
>>
>> # ----------><------------><------------------------------------------
>>
>>
>> Esto ejecutaria la misma accion que tiene asociada el boton de "Exportar
>> a fichero PDF".
>> La cuestion es que pedira al usuario el fichero a donde hay que
>> exportarlo, no se si
>> esto puede ser un problema.
>> En la version 2.3 se le podra pasar un parametro al execute de la accion
>> con el nombre del
>> fichero o un objecto File de java.
>>
>> action.execute("/tmp/mapa.pdf")
>>
>> Ya que comento el uso de la accion "application-export-to-pdf", comentar
>> que todos los
>> menus y botones de la ventana principal de gvSIG tienen asociadas
>> acciones y que se pueden
>> invocar de esta forma desde scripting.
>> Si queremos ver la lista de acciones registradas en gvSIG podemos
>> consultarlas en el menu:
>>
>> Herramientas -> Desarrollo -> Mostrar informacion de acciones
>> disponibles
>>
>> Nos mostrara una tabla con todas las acciones que registran los plugins
>> que hayan instalados
>> en ese momento en gvSIG, la columna "Name" es el nombre de la accion que
>> debemos utilizar como
>> parametro de la llamada a getAction.
>>
>> Un saludo
>> Joaquin
>>
>>
>>
>>> Aqu铆 dejo el c贸digo que configura el mapa.
>>>
>>> Gracias de antemano.
>>>
>>> #--------------><--------------------><--------------------------
>>> # ==========================================================
>>> #
>>> # Declara como que el plugin de scripting puede importar modulos
>>> # de otro plugin de gvSIG.
>>> #
>>> # Por ejemplo, tras ejecutar:
>>> #
>>> # use_plugin("org.gvsig.app.document.layout2.app.mainplugin")
>>> #
>>> # Ya podriamos importar modulos del plugin de Mapas (documento mapa)
>>> #
>>>
>>> def use_plugin(pluginName):
>>> from org.gvsig.andami import PluginsLocator
>>>
>>> pluginsManager = PluginsLocator.getManager()
>>> other = pluginsManager.getPlugin(pluginName)
>>> scripting =
>>> pluginsManager.getPlugin("org.gvsig.scripting.app.extension")
>>> scripting.addDependencyWithPlugin(other)
>>>
>>> #
>>> # ==========================================================
>>> #
>>>
>>> use_plugin("org.gvsig.app.document.layout2.app.mainplugin")
>>>
>>> #--------------><--------------------><--------------------------
>>>
>>> from org.gvsig.app import ApplicationLocator
>>> from org.gvsig.app.project.documents.layout import LayoutManager
>>> from org.gvsig.app.extension import Print
>>> from org.gvsig.app.extension import ExportLayoutExtension
>>> import math
>>> import time
>>>
>>> from java.awt.image import *
>>> from javax.imageio import ImageIO
>>> from java.io import File;
>>>
>>>
>>>
>>> def main(*args):
>>>
>>> #PASAR A VARIABLES DE LA FUNCION
>>> variables={}
>>> txt_rcat = 'Referencia catastral: 987654321098765'
>>> fact_redondeo=50.0
>>> dSemana =time.strftime("%A",time.localtime())
>>> nMes = time.strftime("%B",time.localtime())
>>> fecha=dSemana[:1].upper() + dSemana[1:] + ', ' +
>>> time.strftime("%d",time.localtime()) + ' de ' + nMes[:1].upper()+ nMes[1:]
>>> + ' de ' +time.strftime("%Y",time.localtime())
>>> variables ['Fecha']= fecha
>>> variables ['Rcat']=txt_rcat
>>>
>>> # Recuperamos el proyecto
>>> project = ApplicationLocator.getManager().getCurrentProject()
>>>
>>> # Recuperamos un layout por nombre
>>> layout = project.getDocument("Mapa_1", LayoutManager.TYPENAME)
>>>
>>>
>>> #print layout.__class__.__name__, layout.getName()
>>> contextLayout = layout.getLayoutContext()
>>> for elemento in contextLayout.getAllFFrames():
>>> # print elemento.getName()
>>> if elemento.getName() == 'FFrameView':
>>> mapContext= elemento.getMapContext()
>>> vp = mapContext.getViewPort()
>>> vp.setEnvelope(mapContext.getSelectionBounds())
>>> escala_round
>>> =long(math.ceil(elemento.getScale()/fact_redondeo)*fact_redondeo)
>>> mapContext.setScaleView(escala_round)
>>> txt_escala = 'Escala: %s' %elemento.getScale()
>>>
>>>
>>> if elemento.getName() == 'FFrameText':
>>> if elemento.getTitle() == 'Escala':
>>> elemento.clearText()
>>> elemento.addText (txt_escala)
>>> else:
>>> titulo= elemento.getTitle()
>>> if not (titulo is None):
>>> elemento.clearText()
>>> print titulo,variables[titulo]
>>> elemento.addText (variables[titulo])#路('Referencia catastral:
>>> %s'%txt_rcat)
>>> print "----------------------------"
>>>
>>>
>>> layoutManager =
>>> ApplicationLocator.getProjectManager().getDocumentManager(LayoutManager.TYPENAME)
>>>
>>> layout = project.getDocument("Mapa_1", LayoutManager.TYPENAME)
>>> layoutPanel = layoutManager.getMainWindow(layout)
>>> print layoutPanel.__class__.__name__,
>>> layoutPanel.getDocument().getName()
>>> print dir(layout)
>>> impresora = ExportLayoutExtension
>>> print dir(impresora)
>>>
>>>
>>>
>>> _______________________________________________
>>> gvSIG_usuarios mailing list
>>> gvSIG_usuarios en listserv.gva.es
>>>
>>> Para ver hist贸rico de mensajes, editar sus preferencias de usuario o
>>> darse de baja en esta lista, acuda a la siguiente direcci贸n:
>>>
>>> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios
>>>
>>>
>>
>>
>> --
>> --------------------------------------
>> Joaquin Jose del Cerro Murciano
>> Development and software arquitecture manager at gvSIG Team
>> jjdelcerro en gvsig.com
>> jjdelcerro en gvsig.org
>> gvSIG Association
>> www.gvsig.com
>> www.gvsig.org
>>
>> _______________________________________________
>> gvSIG_usuarios mailing list
>> gvSIG_usuarios en listserv.gva.es
>>
>> Para ver hist贸rico de mensajes, editar sus preferencias de usuario o
>> darse de baja en esta lista, acuda a la siguiente direcci贸n:
>>
>> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios
>>
>>
>
>
> --
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> C茅sar Mart铆nez Izquierdo
> GIS developer
> - - - - - - - - - - - - - - - - - - - -
> SCOLAB: http://www.scolab.es
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>
> _______________________________________________
> gvSIG_usuarios mailing list
> gvSIG_usuarios en listserv.gva.es
>
> Para ver hist贸rico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente direcci贸n:
>
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios
>
>
--
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelcerro en gvsig.com
jjdelcerro en gvsig.org
gvSIG Association
www.gvsig.com
www.gvsig.org
------------ pr髕ima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20160429/911c4aca/attachment.htm
M醩 informaci髇 sobre la lista de distribuci髇 gvSIG_usuarios