<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">El 29 de abril de 2016, 12:50, Javier Galán <span dir="ltr">&lt;<a href="mailto:javiergalans@gmail.com" target="_blank">javiergalans@gmail.com</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Joaquin eso es perfecto<div><br></div><div>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.</div><div><br></div><div><div><br></div><div>layoutManager = ApplicationLocator.getProjectManager().getDocumentManager(LayoutManager.TYPENAME)</div><div>layoutDoc = project.getDocument(&quot;Mapa_1&quot;, LayoutManager.TYPENAME)<br></div><div>layoutWin = layoutManager.getMainWindow(layoutDoc, None)</div><div>layoutWin.getLayoutControl().getLayoutDraw().toPDF(File.createTempFile(&quot;map&quot;,&quot;.pdf&quot;))</div></div><div><br></div><div><br></div></div></blockquote><div><div>Podia ser None tal como lo habia puesto yo por que cogia el documento activo, y si no era un mapa devuelve None. <br></div>Tal como recoges tu el documento mapa no tienes ese problema.<br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div><div>MUCHAS gracias.</div></div></blockquote><div><br></div>De nada.<br></div><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>Un saludo</div><div><br></div></div><div class=""><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">El 29 de abril de 2016, 11:42, Joaquin Jose del Cerro Murciano <span dir="ltr">&lt;<a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div>Holas, de nuevo.<br></div>Estaba haciendo una prueba...<br></div>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:<span><br><br># ----------&gt;&lt;------------&gt;&lt;----<div>--------------------------------------</div><br>from gvsig import *<br><br></span>use_plugin(&quot;org.gvsig.app.document.layout2.app.mainplugin&quot;)<br><br>from <a href="http://java.io" target="_blank">java.io</a> import File<span><br>from org.gvsig.app import ApplicationLocator<br>from org.gvsig.app.project.documents.layout import LayoutManager<br><br></span>def main(*args):<br>  application = ApplicationLocator.getManager() <br>  projectManager = application.getProjectManager()<br>  layoutManager = projectManager.getDocumentManager(LayoutManager.TYPENAME)<br>  <br>  layoutDoc = application.getActiveDocument(LayoutManager.TYPENAME)<br>  # ojo, layoutDoc puede ser None<br>  <br>  layoutWin = layoutManager.getMainWindow(layoutDoc, None)<br>  layoutWin.getLayoutControl().getLayoutDraw().toPDF(File(&quot;/tmp/mapa.pdf&quot;))<br><br># ----------&gt;&lt;------------&gt;&lt;----<div>--------------------------------------</div><br><br><div><div><div><div><div class="gmail_extra"><br><div class="gmail_quote"><span>El 29 de abril de 2016, 11:28, César Martínez Izquierdo <span dir="ltr">&lt;<a href="mailto:cesar.izq@gmail.com" target="_blank">cesar.izq@gmail.com</a>&gt;</span> escribió:<br></span><div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div>Hola Javier,<br><br></div>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 &quot;traducirlo&quot; a python.<br></div><div><br></div>Saludos,<br><br></div>César<br><div><div><br><br><br>    public void toPDF(File pdf) {<br>        Attributes attributes = layoutContext.getAttributes();<br><br>        double w = ((attributes.m_sizePaper.getWidth() * Attributes.DPISCREEN) / Attributes.PULGADA);<br>        double h = ((attributes.m_sizePaper.getHeight() * Attributes.DPISCREEN) / Attributes.PULGADA);<br>        Rectangle pageSize = new com.lowagie.text.Rectangle((float) w, (float) h);<br>        Document document = new Document(pageSize);<br><br>        try {<br>            FileOutputStream fos = new FileOutputStream(pdf);<br>            PdfWriter writer = PdfWriter.getInstance(document, fos);<br>            document.open();<br><br>            PdfContentByte cb = writer.getDirectContent();<br>            Graphics2D g2 = cb.createGraphicsShapes((float) w, (float) h);<br><br>            try {<br>                print(g2, new PageFormat(), 0);<br>            } catch (PrinterException e) {<br>                LOG.error(&quot;Error printing the map&quot;, e);<br>            }<br>            g2.dispose();<br><br>        } catch (DocumentException de) {<br>            LOG.error(&quot;Error printing the map&quot;, de);<br>        } catch (IOException ioe) {<br>            JOptionPane.showMessageDialog(<br>                (Component) PluginServices.getMainFrame(), ioe.getMessage());<br>        }<br><br>        document.close();<br><br>        layoutControl.fullRect();<br>    }<br></div></div></div><div class="gmail_extra"><div><div><br><div class="gmail_quote">2016-04-29 11:20 GMT+02:00 Joaquin Jose del Cerro Murciano <span dir="ltr">&lt;<a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span>El 29 de abril de 2016, 8:48, Javier Galán <span dir="ltr">&lt;<a href="mailto:javiergalans@gmail.com" target="_blank">javiergalans@gmail.com</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hola a todos.<div><br></div><div>He hecho un script que configura un mapa con datos de una parcela seleccionada.</div><div>Estoy intentando hacer que una vez termine lo imprima en pdf, pero no logro averiguar por donde ir.</div><div><br></div><div>Alguien lo ha intentado antes? </div><div><br></div></div></blockquote></span><div><br>Hola, <br>asi de forma rapida podrias hacer algo como:<br><br># ----------&gt;&lt;------------&gt;&lt;------------------------------------------<br>from gvsig import *<br><br>from org.gvsig.andami import PluginsLocator<br><br>def main(*args):<br><br>  actionManager = PluginsLocator.getActionInfoManager()<br>  action = actionManager.getAction(&quot;application-export-to-pdf&quot;)<br>  action.execute()<br><br># ----------&gt;&lt;------------&gt;&lt;------------------------------------------<br><br><br>Esto ejecutaria la misma accion que tiene asociada el boton de &quot;Exportar a fichero PDF&quot;.<br>La cuestion es que pedira al usuario el fichero a donde hay que exportarlo, no se si <br>esto puede ser un problema.<br>En la version 2.3 se le podra pasar un parametro al execute de la accion con el nombre del<br>fichero o un objecto File de java.<br><br>  action.execute(&quot;/tmp/mapa.pdf&quot;)<br><br>Ya que comento el uso de la accion &quot;application-export-to-pdf&quot;, comentar que todos los <br>menus y botones de la ventana principal de gvSIG tienen asociadas acciones y que se pueden<br>invocar de esta forma desde scripting. <br>Si queremos ver la lista de acciones registradas en gvSIG podemos consultarlas en el menu:<br><br>  Herramientas -&gt; Desarrollo -&gt; Mostrar informacion de acciones disponibles<br><br>Nos mostrara una tabla con todas las acciones que registran los plugins que hayan instalados<br>en ese momento en gvSIG, la columna &quot;Name&quot; es el nombre de la accion que debemos utilizar como<br>parametro de la llamada a getAction.<br><br>Un saludo<br>Joaquin<br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div><div dir="ltr"><div></div><div>Aquí dejo el código que configura el mapa.</div><div><br></div><div>Gracias de antemano.</div><div><br></div><div><div>#--------------&gt;&lt;--------------------&gt;&lt;--------------------------</div><div># ==========================================================</div><div>#</div><div># Declara como que el plugin de scripting puede importar modulos </div><div># de otro plugin de gvSIG.</div><div>#</div><div># Por ejemplo, tras ejecutar:</div><div>#</div><div>#   use_plugin(&quot;org.gvsig.app.document.layout2.app.mainplugin&quot;)</div><div>#</div><div># Ya podriamos importar modulos del plugin de Mapas (documento mapa)</div><div>#</div><div><br></div><div>def use_plugin(pluginName):</div><div>  from org.gvsig.andami import PluginsLocator</div><div><br></div><div>  pluginsManager = PluginsLocator.getManager()</div><div>  other = pluginsManager.getPlugin(pluginName)</div><div>  scripting = pluginsManager.getPlugin(&quot;org.gvsig.scripting.app.extension&quot;)</div><div>  scripting.addDependencyWithPlugin(other)</div><div><br></div><div>#</div><div># ==========================================================</div><div>#</div><div><br></div><div>use_plugin(&quot;org.gvsig.app.document.layout2.app.mainplugin&quot;)</div><div><br></div><div>#--------------&gt;&lt;--------------------&gt;&lt;--------------------------</div><div><br></div><div>from org.gvsig.app import ApplicationLocator</div><div>from org.gvsig.app.project.documents.layout import LayoutManager</div><div>from org.gvsig.app.extension import Print</div><div>from org.gvsig.app.extension import ExportLayoutExtension</div><div>import math</div><div>import time</div><div><br></div><div>from java.awt.image import *</div><div>from javax.imageio import ImageIO</div><div>from <a href="http://java.io" target="_blank">java.io</a> import File;</div><div><br></div><div><br></div><div><br></div><div>def main(*args):</div><div><br></div><div>  #PASAR A VARIABLES DE LA FUNCION</div><div>  variables={}</div><div>  txt_rcat = &#39;Referencia catastral: 987654321098765&#39;</div><div>  fact_redondeo=50.0</div><div>  dSemana =time.strftime(&quot;%A&quot;,time.localtime())</div><div>  nMes = time.strftime(&quot;%B&quot;,time.localtime())</div><div>  fecha=dSemana[:1].upper() + dSemana[1:] + &#39;, &#39; + time.strftime(&quot;%d&quot;,time.localtime()) + &#39; de &#39; + nMes[:1].upper()+ nMes[1:] + &#39; de &#39; +time.strftime(&quot;%Y&quot;,time.localtime())</div><div>  variables [&#39;Fecha&#39;]= fecha</div><div>  variables [&#39;Rcat&#39;]=txt_rcat</div><div><br></div><div>  # Recuperamos el proyecto</div><div>  project = ApplicationLocator.getManager().getCurrentProject()</div><div><br></div><div>  # Recuperamos un layout por nombre</div><div>  layout = project.getDocument(&quot;Mapa_1&quot;, LayoutManager.TYPENAME)</div><div><br></div><div>  </div><div>  #print layout.__class__.__name__, layout.getName()</div><div>  contextLayout = layout.getLayoutContext()</div><div>  for elemento in  contextLayout.getAllFFrames():</div><div>#    print elemento.getName()</div><div>    if elemento.getName() == &#39;FFrameView&#39;:</div><div>      mapContext= elemento.getMapContext()</div><div>      vp = mapContext.getViewPort()</div><div>      vp.setEnvelope(mapContext.getSelectionBounds())</div><div>      escala_round =long(math.ceil(elemento.getScale()/fact_redondeo)*fact_redondeo)</div><div>      mapContext.setScaleView(escala_round)</div><div>      txt_escala = &#39;Escala: %s&#39; %elemento.getScale()</div><div>      </div><div>      </div><div>    if elemento.getName() == &#39;FFrameText&#39;:</div><div>      if elemento.getTitle() == &#39;Escala&#39;:</div><div>        elemento.clearText()</div><div>        elemento.addText (txt_escala)</div><div>      else:</div><div>        titulo= elemento.getTitle()</div><div>        if not (titulo is None):</div><div>          elemento.clearText()</div><div>          print titulo,variables[titulo]</div><div>          elemento.addText (variables[titulo])#·(&#39;Referencia catastral: %s&#39;%txt_rcat)</div><div>  print &quot;----------------------------&quot;</div><div>  </div><div><br></div><div>  layoutManager = ApplicationLocator.getProjectManager().getDocumentManager(LayoutManager.TYPENAME)</div><div><br></div><div>  layout = project.getDocument(&quot;Mapa_1&quot;, LayoutManager.TYPENAME)</div><div>  layoutPanel = layoutManager.getMainWindow(layout)</div><div>  print layoutPanel.__class__.__name__, layoutPanel.getDocument().getName()</div><div>  print dir(layout)</div><div>  impresora = ExportLayoutExtension</div><div>  print dir(impresora)</div></div><div><br></div><div><br></div></div>
<br></div></div>_______________________________________________<br>
gvSIG_usuarios mailing list<br>
<a href="mailto:gvSIG_usuarios@listserv.gva.es" target="_blank">gvSIG_usuarios@listserv.gva.es</a><br>
<br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:<br>
<br>
<a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios</a><br>
<br></blockquote></div><span><font color="#888888"><br><br clear="all"><br>-- <br><div>--------------------------------------<br>Joaquin Jose del Cerro Murciano<br>Development and software arquitecture manager at gvSIG Team<br><a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br><a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a><br>gvSIG Association<br><a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br><a href="http://www.gvsig.org" target="_blank">www.gvsig.org</a></div>
</font></span></div></div>
<br>_______________________________________________<br>
gvSIG_usuarios mailing list<br>
<a href="mailto:gvSIG_usuarios@listserv.gva.es" target="_blank">gvSIG_usuarios@listserv.gva.es</a><br>
<br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:<br>
<br>
<a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br></div></div><div><div dir="ltr"><div><div><div><div>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br></div></div><span><font color="#888888">   César Martínez Izquierdo<br>   GIS developer<br>   -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -<br></font></span></div><span><font color="#888888"><div>   SCOLAB: <a href="http://www.scolab.es" target="_blank">http://www.scolab.es</a><br></div><div>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</div></font></span></div></div></div>
</div>
<br>_______________________________________________<br>
gvSIG_usuarios mailing list<br>
<a href="mailto:gvSIG_usuarios@listserv.gva.es" target="_blank">gvSIG_usuarios@listserv.gva.es</a><br>
<br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:<br>
<br>
<a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios</a><br>
<br></blockquote></div></div></div><div><div><br><br clear="all"><br>-- <br><div>--------------------------------------<br>Joaquin Jose del Cerro Murciano<br>Development and software arquitecture manager at gvSIG Team<br><a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br><a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a><br>gvSIG Association<br><a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br><a href="http://www.gvsig.org" target="_blank">www.gvsig.org</a></div>
</div></div></div></div></div></div></div></div>
<br>_______________________________________________<br>
gvSIG_usuarios mailing list<br>
<a href="mailto:gvSIG_usuarios@listserv.gva.es" target="_blank">gvSIG_usuarios@listserv.gva.es</a><br>
<br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:<br>
<br>
<a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
gvSIG_usuarios mailing list<br>
<a href="mailto:gvSIG_usuarios@listserv.gva.es">gvSIG_usuarios@listserv.gva.es</a><br>
<br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:<br>
<br>
<a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">--------------------------------------<br>Joaquin Jose del Cerro Murciano<br>Development and software arquitecture manager at gvSIG Team<br><a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br><a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a><br>gvSIG Association<br><a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br><a href="http://www.gvsig.org" target="_blank">www.gvsig.org</a></div>
</div></div>