[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