style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Ayuda, Enviar a PDF

Hi, nesesito enviar a un archivo PDF las filas q se seleccionen de una tabla, y la opcion de mandar toda la tabla, lo estoy haciendo con un popupmenu cuando se de click derecho (donde aparesen las 2 opcioneds). No se si alguien me pueda ayudar, se los agradeceria mucho.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Nopalin

Utiliza un reporteador

No se que tantas opciones hay por ahi, lo que si se es que no se puede hacer solo con los jars que trae la jre por default, por lo que tienes que buscar una libreria que lo haga. En mi caso particular utilizo la de apache fop para generar reportes, y de ahi mismo se puede exportar a PDF.

Si quieres utilizar apache fop, primero tienes que bajar el jar y las dependencias necesarias:

  1. fop-0.95.jar
  2. avalon-framework-api-4.3.1.jar (la encuentras como proyecto escalibur)
  3. commons-logging-1.1.1.jar
  4. xmlgraphics-commons-1.3.1.jar

Estas son las que yo tengo para un proyecto, pero checa cuales realmente ocupas en : http://xmlgraphics.apache.org/fop/0.94/running.html

Para que las cosas funcionen con apache fop, tienes que hacer una plantilla en xsl y un archivo en xml de entrada, para que te genere una salida. Ten en cuenta que apache fop implementa un estandar y que su entendimiento depende de que busques info, lo que yo te voy a proporcionar aqui es solo una base para que te quede mas claro el asunto.

//aqui pon los imports

public class FopTest{
        public static void main(String[] args){
                //creamos el factory
                FopFactory fopFactory = FopFactory.newInstance();
               
                //creamos el objeto fop especificando el tipo de salida
                //que son los tipos mime declarados en
                //org.apache.fop.apps.MimeConstants
                Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF);
               
                TransformerFactory tFactory = TransformerFactory.newInstance();
                Source xslt = new StreamSource(crearXsl());
                Transformer transformer = tFactory.newTransformer(xslt);
               
                Source src = new StreamSource(crearXml());
                Result res = new SAXResult(fop.getDefaultHandler());
                           
                transformer.transform(src, res);
               
                //los archivos en xsly xml utilizan utf-8 por que es el default en apache fop.
                //El xsl lo puedes obtener de una ruta estatica con: new FileInputStream(new File("C://miSistema/plantillas/archivo.xsl"));
                //o lo puedes obtener dentro de un jar utilizando el classloader
                // Thread.currentThread().getContextClassLoader().getResource("my/package/resources/plantillas/archivo.xsl");
                //El xml bueno, ese si es dinamico.
        }
       
        private static InputStream crearXsl(){
                StringBuilder sb = new StringBuilder();
                //OJO: mete todo esto al string builder  con sb.append();
                /*
                <?xml version="1.0" encoding="UTF-8"?>
                <xsl:stylesheet
                         xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                         xmlns:fo="http://www.w3.org/1999/XSL/Format">

                <xsl:template match="reporte">
                  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

                        <!-- defines page layout -->
                        <fo:layout-master-set>
                                <fo:simple-page-master master-name="squela"
                                        page-width="21.69cm" page-height="27.84cm"
                                        margin-top="1cm" margin-bottom="1cm"
                                        margin-left="1cm" margin-right="1cm">
                                       
                                        <fo:region-body margin-top="0cm" margin-bottom="0cm" margin-left="0cm" margin-right="0cm"/>
                                </fo:simple-page-master>
                        </fo:layout-master-set>

                        <fo:page-sequence master-reference="squela">
                       
                                <fo:flow flow-name="xsl-region-body">
                                        <fo:block font-size="12px">
                                                Tabla Exportada a PDF
                                        <fo:block>
                                       
                                        <fo:block padding-top="1cm" />
                                       
                                        <fo:table table-layout="fixed" inline-progression-dimension.optimum="100%">
                                                <fo:table-column column-width="3cm"/>
                                                <fo:table-column column-width="3cm"/>
                                                <fo:table-column column-width="3cm"/>
                                                <fo:table-column column-width="3cm"/>
                                               
                                                <fo:table-header>
                                                        <fo:table-row>
                                                                <fo:table-cell>
                                                                        <fo:block>
                                                                                Columna 1
                                                                        </fo:block>
                                                                </fo:table-cell>
                                                               
                                                                <fo:table-cell>
                                                                        <fo:block>
                                                                                Columna 2
                                                                        </fo:block>
                                                                </fo:table-cell>
                                                               
                                                                <fo:table-cell>
                                                                        <fo:block>
                                                                                Columna 3
                                                                        </fo:block>
                                                                </fo:table-cell>
                                                               
                                                                <fo:table-cell>
                                                                        <fo:block>
                                                                                Columna 4
                                                                        </fo:block>
                                                                </fo:table-cell>
                                                        </fo:table-row>
                                                </fo:table-header>
                                               
                                                <fo:table-body>
                                                        <xsl:for-each select="alumnos/alumno">
                                                                <fo:table-row>
                                                                        <fo:table-cell>
                                                                                <fo:block>
                                                                                        <xsl:value-of select="nombre"/>
                                                                                </fo:block>
                                                                        </fo:table-cell>
                                                                       
                                                                        <fo:table-cell>
                                                                                <fo:block>
                                                                                        <xsl:value-of select="paterno"/>
                                                                                </fo:block>
                                                                        </fo:table-cell>
                                                                       
                                                                        <fo:table-cell>
                                                                                <fo:block>
                                                                                        <xsl:value-of select="materno"/>
                                                                                </fo:block>
                                                                        </fo:table-cell>
                                                                       
                                                                        <fo:table-cell>
                                                                                <fo:block>
                                                                                        <xsl:value-of select="edad"/>
                                                                                </fo:block>
                                                                        </fo:table-cell>
                                                                </fo:table-row>
                                                        </xsl:for-each>
                                                </fo:table-body>
                                        </fo:table>
                                </fo:flow>
                        </fo:page-sequence>
                  </fo:root>
                </xsl:template>
                </xsl:stylesheet>
                */
               
                return new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
        }
       
        private static InputStream Xml(){
                StringBuilder sb = new StringBuilder();
                //OJO: mete todo esto al string builder  con sb.append();
                /*
                        <?xml version="1.0" encoding="UTF-8"?>
                        <reporte>
                                <alumnos>
                                        <alumno>
                                                <nombre> Jose </nombre>
                                                <paterno> Hernandez </paterno>
                                                <materno> Huerta </materno>
                                                <edad> 22 </edad>
                                        </alumno>
                                       
                                        <alumno>
                                                <nombre> Miugel </nombre>
                                                <paterno> Hidalgo </paterno>
                                                <materno> y Costilla </materno>
                                                <edad> 250 </edad>
                                        </alumno>
                                       
                                        <alumno>
                                                <nombre> Benito </nombre>
                                                <paterno> Juarez </paterno>
                                                <materno> Herrera </materno>
                                                <edad> 150 </edad>
                                        </alumno>
                                </alumnos>
                        </reporte>
                */

               
                return new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
        }
}

Espero haber sido de ayuda.

Saludos

Imagen de luxspes

Depende: DynamicJasper o Jasper + IReports

O tambien puede usar DynamicJasper y quiza conseguir aproximadamente el mismo efecto, pero con mucho menos codigo (y especialmente, sin meterte en el problema de tener todo ese XML en en un StringBuilder).

DynamicJasper te permite hacer reportes muy rapido con muy poco codigo.. ahora, si quieres un look mas personalizado para tus reportes, entonces Jasper (la version no dinamica) puede ser mas adecuado a tus necesidades. Jasper usa tambien XML para describir el reporte, pero no tienes que escribirlo a mano, puedes usar IReport para diseñar visualmente tus reportes

Todas estas soluciones son gratuitas.
Saludos

Imagen de Nopalin

simon

es lo que tampoco me gusta mucho de xsl:fo, que la plantilla de diseño es inmensa, vaya casi parece que estas haciendo una página web. Y también batalle un rato por que al parecer el estandar xsl no permite insertar uri's que resuelvan a un recurso dentro del classpath.

Pero bueno, tendré que probar los otros reporteadores para dar una opinion mas acertada.

saludos

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">