[Gvsig_usuarios] Imprimir PDF script
Joaquin Jose del Cerro Murciano
jjdelcerro en gvsig.org
Vie Abr 29 13:32:20 CEST 2016
El 29 de abril de 2016, 12:50, Javier Galán <javiergalans en gmail.com>
escribió:
> Joaquin eso es perfecto
>
> Lo he pusto en un fichero temporal para luego poder añadirlo al resto del
> informe. Como el Nombre del Mapa es fijo para cada tipo de informe, es poco
> probable que el layaoutdoc sea none.
>
>
> layoutManager =
> ApplicationLocator.getProjectManager().getDocumentManager(LayoutManager.TYPENAME)
> layoutDoc = project.getDocument("Mapa_1", LayoutManager.TYPENAME)
> layoutWin = layoutManager.getMainWindow(layoutDoc, None)
>
> layoutWin.getLayoutControl().getLayoutDraw().toPDF(File.createTempFile("map",".pdf"))
>
>
> Podia ser None tal como lo habia puesto yo por que cogia el documento
activo, y si no era un mapa devuelve None.
Tal como recoges tu el documento mapa no tienes ese problema.
> MUCHAS gracias.
>
De nada.
> Un saludo
>
>
> El 29 de abril de 2016, 11:42, Joaquin Jose del Cerro Murciano <
> jjdelcerro en gvsig.org> escribió:
>
>> 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
>>
>> _______________________________________________
>> 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
>>
>>
>
> _______________________________________________
> 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óxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20160429/44cbbb74/attachment.htm
Más información sobre la lista de distribución gvSIG_usuarios