[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