[Gvsig_usuarios] Imprimir PDF script

Javier Gal醤 javiergalans en gmail.com
Vie Abr 29 11:41:26 CEST 2016


Muchas gracias a ambos.

Creo que la soluci贸n de Cesar se ajusta m谩s a lo que necesito ya que podre
hacer el mapa en un temporal y a帽adirlo a otro informe. Me explico fatal.

Lo que intentaba decir es que ya tengo un PDF al que le quiero a帽adir el
mapa. Por lo que con la soluci贸n de C茅sar puedo crearlo en un temporal y
luego a帽adirselo.

De nuevo muchas gracias a ambos.

Un saludo

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
>
>
------------ pr髕ima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20160429/d8128af5/attachment.htm 


M醩 informaci髇 sobre la lista de distribuci髇 gvSIG_usuarios