Example usage for com.itextpdf.text Chunk Chunk

List of usage examples for com.itextpdf.text Chunk Chunk

Introduction

In this page you can find the example usage for com.itextpdf.text Chunk Chunk.

Prototype

private Chunk(final Float tabInterval, final boolean isWhitespace) 

Source Link

Document

Creates a tab Chunk.

Usage

From source file:com.vectorprint.report.itext.Help.java

License:Open Source License

public static void printStylerHelp(Document document, com.itextpdf.text.Font f)
        throws IOException, FileNotFoundException, ClassNotFoundException, InstantiationException,
        IllegalAccessException, DocumentException, NoSuchMethodException, InvocationTargetException {
    for (BaseStyler s : getParameterizables(AbstractStyler.class.getPackage(), BaseStyler.class)) {
        document.add(Chunk.NEWLINE);/*from   w  ww.j av  a2s  . c o  m*/
        document.add(
                new Chunk(s.getClass().getSimpleName(), f).setLocalDestination(s.getClass().getSimpleName()));
        document.add(new Phrase(":  " + s.getHelp() + "\n  parameters available:", f));

        ByteArrayOutputStream o = new ByteArrayOutputStream(400);
        PrintStream out = new PrintStream(o);
        printParamInfo(s, out);
        out.println("  able to style: " + s.getSupportedClasses());
        addStylerForClass(s);
        if (s.creates()) {
            out.println("  creates supported Class");
        }
        out.flush();
        document.add(new Paragraph(o.toString(), f));
    }
    printStylersPerClass(document, f);
}

From source file:com.vectorprint.report.itext.Help.java

License:Open Source License

public static void printConditionrHelp(Document document, com.itextpdf.text.Font f)
        throws IOException, FileNotFoundException, ClassNotFoundException, InstantiationException,
        IllegalAccessException, DocumentException, NoSuchMethodException, InvocationTargetException {
    document.add(new Paragraph(
            "\nAvailable conditions for stylers that can be configured in a properties file, together with parameters that may be used."
                    + "---------------------------------------------------------------------------------------------------------\n"
                    + "  All parameters mentioned below can take defaults through properties in the form <(Parent)Class.getSimpleName().parameterName>=<value>\n",
            f));//  www  .  ja v  a 2s .c o m
    for (StylingCondition s : getParameterizables(AbstractCondition.class.getPackage(),
            StylingCondition.class)) {
        document.add(Chunk.NEWLINE);
        document.add(
                new Chunk(s.getClass().getSimpleName(), f).setLocalDestination(s.getClass().getSimpleName()));
        document.add(new Phrase(":  " + s.getHelp() + "\n  parameters available:", f));

        ByteArrayOutputStream o = new ByteArrayOutputStream(400);
        PrintStream out = new PrintStream(o);
        printParamInfo(s, out);
        out.flush();
        document.add(new Paragraph(o.toString(), f));
    }
}

From source file:com.vectorprint.report.itext.Help.java

License:Open Source License

public static void printStylersPerClass(Document document, com.itextpdf.text.Font f) throws DocumentException {
    document.add(Chunk.NEWLINE);//  w  ww .j  av  a2  s.  com
    document.add(new Phrase("Overview of stylers available per iText Class (and its subclasses)", f));
    document.add(Chunk.NEWLINE);
    for (Map.Entry<Class, Set<Class<? extends BaseStyler>>> e : stylersForClass.entrySet()) {
        document.add(Chunk.NEWLINE);
        document.add(new Chunk("stylers for " + e.getKey().getSimpleName() + ": ", f));
        for (Class bs : e.getValue()) {
            document.add(
                    new Chunk(bs.getSimpleName(), f).setLocalGoto(bs.getSimpleName()).setUnderline(0.3f, -1f));
            document.add(new Chunk(", ", f));
        }
    }
}

From source file:com.vectorprint.report.itext.ItextHelper.java

License:Open Source License

public static float getTextWidth(String text, Font f) {
    return getTextWidth(new Chunk(text, f));
}

From source file:com.vectorprint.report.itext.ItextHelper.java

License:Open Source License

public static float getTextWidth(String text, BaseFont bf, float size) {
    return getTextWidth(new Chunk(text, new Font(bf, size)));
}

From source file:com.vectorprint.report.itext.ItextHelper.java

License:Open Source License

public static float getTextHeight(String text, Font f) {
    return getTextHeight(new Chunk(text, f));
}

From source file:com.vectorprint.report.itext.ItextHelper.java

License:Open Source License

public static float getTextHeight(String text, BaseFont bf, float size) {
    return getTextHeight(new Chunk(text, new Font(bf, size)));
}

From source file:comedor.actions.OperacionesComedorAction.java

private void crearPDF() throws IOException, DocumentException {
    Restaurante restaurante = godr.obtenerDatosRestaurante();

    //Creamos el directorio donde almacenar los pdf sino existe
    File file = new File(RUTA_CUENTAS); //Especificamos la ruta
    if (!file.exists()) { //Si el directorio no existe
        if (file.mkdir()) { //Creamos el directorio
            //Le asignamos los permisos 777
            file.setExecutable(true);/*from   w  ww.  j  a  v a  2 s . c o  m*/
            file.setReadable(true);
            file.setExecutable(true);
        } else {
            System.err.println("Error al crear el directorio especificado");
            throw new IOException(); //Lanzamos una excepcion
        }
    }

    if (file.exists()) { //Si el directorio existe
        //Creamos el documento
        Document documento = new Document();
        //Creamos el OutputStream para el fichero pdf   
        FileOutputStream destino = new FileOutputStream(RUTA_CUENTAS + nombreDocumento);

        //Asociamos el FileOutputStream al Document
        PdfWriter.getInstance(documento, destino);
        //Abrimos el documento
        documento.open();

        //Aadimos el nombre del restaurante
        Font titulo = FontFactory.getFont(FontFactory.TIMES, 16, Font.BOLDITALIC);
        Chunk chunk = new Chunk(restaurante.getNombre(), titulo);
        Paragraph parrafo = new Paragraph(chunk);
        parrafo.setAlignment(Element.ALIGN_CENTER);
        documento.add(parrafo);
        //Aadimos la imagen
        String path = request.getServletContext().getRealPath("/img/elvis.png");
        Image foto = Image.getInstance(path);
        foto.scaleToFit(100, 100);
        foto.setAlignment(Chunk.ALIGN_MIDDLE);
        documento.add(foto);
        //Aadimos los datos del restaurante
        Font datos = FontFactory.getFont(FontFactory.TIMES, 12, Font.NORMAL);
        chunk = new Chunk(getText("cuenta.cif") + ": " + restaurante.getCif(), datos);
        documento.add(new Paragraph(chunk));
        chunk = new Chunk(getText("cuenta.direccion") + ": " + restaurante.getDireccion(), datos);
        documento.add(new Paragraph(chunk));
        chunk = new Chunk(getText("cuenta.telefono") + ": " + restaurante.getTelefono(), datos);
        documento.add(new Paragraph(chunk));
        //Aadimos los datos de la cuenta
        chunk = new Chunk(getText("cuenta.cuentaId") + ": " + cuenta.getId(), datos);
        documento.add(new Paragraph(chunk));
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd-MM-yyyy");
        chunk = new Chunk(getText("cuenta.fecha") + ": " + formatoFecha.format(cuenta.getFecha()), datos);
        documento.add(new Paragraph(chunk));
        SimpleDateFormat formtoHora = new SimpleDateFormat("HH:mm:ss");
        chunk = new Chunk(getText("cuenta.hora") + ": " + formtoHora.format(cuenta.getFecha()), datos);
        documento.add(new Paragraph(chunk));
        //Aadimos los datos del pedido
        //Obtenemos el usuario, es decir, del camarero con el nombre que tenemos registrado en la session 
        chunk = new Chunk(getText("cuenta.camarero") + ": " + session.get("usuario").toString(), datos);
        documento.add(new Paragraph(chunk));
        documento.add(new Chunk(Chunk.NEWLINE)); //Salto de linea        
        //Aadimos la tabla con los datos del pedido
        //Creamos una tabla
        PdfPTable tabla = new PdfPTable(4); //Especificamos el numero de columnas
        //Aadimos la cabecera de la tabla
        tabla.addCell(getText("cuenta.producto"));
        tabla.addCell(getText("cuenta.unidades"));
        tabla.addCell(getText("cuenta.pvp"));
        tabla.addCell(getText("cuenta.total"));
        for (Producto producto : pedido.getListaProductos()) {
            tabla.addCell(producto.getNombre());
            tabla.addCell(String.valueOf(producto.getUnidades()));
            tabla.addCell(String.valueOf(producto.getPrecio()));
            tabla.addCell(String.valueOf(producto.getPrecio() * producto.getUnidades()));

            if (producto instanceof Hamburguesa) {
                Hamburguesa h = (Hamburguesa) producto;
                for (Producto extra : h.getListaProductosExtra()) {
                    tabla.addCell("(E) " + extra.getNombre());
                    tabla.addCell(String.valueOf(extra.getUnidades()));
                    tabla.addCell(String.valueOf(extra.getPrecio()));
                    tabla.addCell(String.valueOf(extra.getPrecio() * extra.getUnidades()));
                }
            }
        }
        //Aadimos la tabla al documento
        documento.add(tabla);
        documento.add(new Chunk(Chunk.NEWLINE)); //Salto de linea
        //Aadimos una tabla con los impuestos y el total a pagar
        tabla = new PdfPTable(3); //Especificamos el numero de columnas    
        tabla.addCell(getText("cuenta.baseImponible") + ": " + pedido.getImporte() + "");
        tabla.addCell("");
        tabla.addCell("");
        DecimalFormat formato = new DecimalFormat("#.##");
        for (Impuesto dato : listaImpuestos) {
            tabla.addCell("");
            tabla.addCell(dato.getNombre() + ": " + dato.getValor());
            double impuesto = (pedido.getImporte() * dato.getValor()) / 100;
            tabla.addCell(
                    getText("cuenta.impuesto") + " " + dato.getNombre() + ": " + formato.format(impuesto));
        }
        tabla.addCell(getText("cuenta.total") + ": " + cuenta.getCantidad() + "");
        tabla.addCell("");
        tabla.addCell("");
        //Aadimos la tabla al documento
        documento.add(tabla);

        //Cerramos el documento
        documento.close();

    } else { //Si el directoiro no existe
        System.err.println("OperacionesComedorAction. Error no existe el directorio especificado");
        throw new IOException(); //Lanzamos una excepcion
    }
}

From source file:Controller.ControllerCompra.java

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.//from ww w  .  j a  v a  2 s. c o  m
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    if (request.getParameter("action") != null) {
        //int estado = 0;
        String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
                + request.getContextPath();
        String action = request.getParameter("action");
        switch (action) {
        case "Registrar": {
            String documentoUsuario = (request.getParameter("documentoUsuario"));
            String facturaProveedor = (request.getParameter("txtNumeroFactura"));
            String nombreProveedor = (request.getParameter("txtNombre"));
            int lenght = Integer.parseInt(request.getParameter("size"));
            int totalCompra = Integer.parseInt(request.getParameter("txtTotalCompra"));
            listObjDetalleMovimientos = new ArrayList<>();
            for (int i = 0; i < lenght; i++) {
                _objDetalleMovimiento = new ObjDetalleMovimiento();
                _objDetalleMovimiento
                        .setIdArticulo(Integer.parseInt(request.getParameter("lista[" + i + "][idArticulo]")));
                _objDetalleMovimiento
                        .setCantidad(Integer.parseInt(request.getParameter("lista[" + i + "][cantidad]")));
                _objDetalleMovimiento.setPrecioArticulo(
                        Integer.parseInt(request.getParameter("lista[" + i + "][precioArticulo]")));
                _objDetalleMovimiento.setTotalDetalleMovimiento(
                        _objDetalleMovimiento.getCantidad() * _objDetalleMovimiento.getPrecioArticulo());
                _objDetalleMovimiento.setDescuento(lenght);
                listObjDetalleMovimientos.add(_objDetalleMovimiento);
            }
            _objUsuario.setDocumentoUsuario(documentoUsuario);
            _objCompra.setFacturaProveedor(facturaProveedor);
            _objCompra.setNombreProveedor(nombreProveedor);
            _objCompra.setTotalCompra(totalCompra);
            daoModelCompra = new ModelCompra();
            String salida = Mensaje(daoModelCompra.Add(_objCompra, _objUsuario, listObjDetalleMovimientos),
                    "La compra ha sido registrada", "Ha ocurrido un error");
            daoModelCompra.Signout();
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(salida);
            break;
        }
        case "Consultar": {
            int id = Integer.parseInt(request.getParameter("id"));
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(consultarDetalle(id));
            break;
        }
        case "Enlistar": {
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(getTableCompra());
            break;
        }
        //<editor-fold defaultstate="collapsed" desc="PDF mediante iText">
        case "Imprimir": {
            response.setContentType("application/pdf");
            try {
                Locale loc = Locale.getDefault();
                NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(loc);
                //Primero obtengo el id del Movimiento
                int id = Integer.parseInt(request.getParameter("id"));
                //Obtengo el reporte a manera de Map
                Map material = reporte(id);
                //Topo ese reporte y lo divido, primero en la compra y luego el detalle
                Map<String, String> compra = (Map) material.get("Compra");
                List<Map> detalle = (List) material.get("Detalle");
                //Creo el documento y obtengo el canal de comunicacion con el servidor, para luego enviar el documento.
                Document document = new Document();
                OutputStream os = response.getOutputStream();
                //Creo una instancia a partir del documento y del canal
                PdfWriter.getInstance(document, os);
                //Abro el documento
                document.open();
                Image logo = Image.getInstance(url + "/public/images/logo.png");
                logo.scaleAbsolute(new Rectangle(logo.getPlainWidth() / 4, logo.getPlainHeight() / 4));
                document.add(logo);
                //Creo una fuente para la letra en negrilla
                final Font helveticaBold = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);
                //Escribo y agrego un primer parrafo con los datos basicos de la compra                        
                Paragraph headerDerecha = new Paragraph();
                headerDerecha.add(new Chunk("Nombre del Proveedor: ", helveticaBold));
                headerDerecha.add(new Chunk(compra.get("nombreProveedor") + "\n"));
                headerDerecha.add(new Chunk("Factura del Proveedor: ", helveticaBold));
                headerDerecha.add(new Chunk(compra.get("facturaProveedor") + "\n"));
                headerDerecha.add(new Chunk("Fecha Compra: ", helveticaBold));
                headerDerecha.add(new Chunk(compra.get("fechaCompra") + "\n"));
                //Escribo y agrego un segundo parrafo con los datos basicos de Stelarte  
                Paragraph headerIzquierda = new Paragraph();
                headerIzquierda.add(new Chunk("Stelarte.Decoracion \n", helveticaBold));
                headerIzquierda.add(new Chunk("Direccin: ", helveticaBold));
                headerIzquierda.add(new Chunk("Calle Falsa 123 # 12a34\n"));
                headerIzquierda.add(new Chunk("Telfono: ", helveticaBold));
                headerIzquierda.add(new Chunk("2583697 \n"));
                //Agrego los dos anteriores parrafos al Header
                PdfPTable header = new PdfPTable(2);
                header.getDefaultCell().setBorder(0);
                header.addCell(headerIzquierda);
                header.addCell(headerDerecha);
                header.setWidthPercentage(100f);
                header.setSpacingAfter(20);
                document.add(header);
                //Creo la tabla del detalle
                PdfPTable tablaDetalle = new PdfPTable(new float[] { 1, 3, 2, 2 });
                tablaDetalle.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
                //Creo el titulo, le quito el borde, le digo que ocupara cuatro columnas y que ser centrado
                PdfPCell tituloCell = new PdfPCell(new Phrase("Detalle de Compra", helveticaBold));
                tituloCell.setBorder(0);
                tituloCell.setColspan(4);
                tituloCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                tablaDetalle.addCell(tituloCell);
                //Aqui creo cada cabecera
                tablaDetalle.getDefaultCell().setBackgroundColor(BaseColor.LIGHT_GRAY);
                tablaDetalle.addCell(new Phrase("ID", helveticaBold));
                tablaDetalle.addCell(new Phrase("Nombre", helveticaBold));
                tablaDetalle.addCell(new Phrase("Cantidad", helveticaBold));
                tablaDetalle.addCell(new Phrase("Valor", helveticaBold));
                tablaDetalle.getDefaultCell().setBackgroundColor(null);
                //Aqui agrego la tabla cada articulo.
                for (Map<String, String> next : detalle) {
                    tablaDetalle.addCell(next.get("idArticulo"));
                    tablaDetalle.addCell(next.get("descripcionArticulo"));
                    tablaDetalle.addCell(next.get("cantidad"));
                    tablaDetalle
                            .addCell(currencyFormatter.format(Integer.parseInt(next.get("precioArticulo"))));
                }
                //Creo el Footer
                headerIzquierda = new Paragraph();
                headerIzquierda.add(new Chunk("Total: ", helveticaBold));
                headerIzquierda
                        .add(new Chunk(currencyFormatter.format(Integer.parseInt(compra.get("totalCompra")))));
                PdfPCell footerCell = new PdfPCell(headerIzquierda);
                footerCell.setBorder(0);
                footerCell.setColspan(4);
                footerCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                tablaDetalle.addCell(footerCell);
                //Establesco el tamao  y posicion de la tabla, luego la agrego al documento
                tablaDetalle.setWidthPercentage(100f);
                tablaDetalle.setHorizontalAlignment(Element.ALIGN_RIGHT);
                document.add(tablaDetalle);
                //Cierro el documento y lo envio con flush.
                document.close();
                response.setHeader("Content-Disposition", "attachment;filename=\"reporte.pdf\"");
                os.flush();
                os.close();
            } catch (DocumentException de) {
                throw new IOException(de.getMessage());
            }
            break;
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="PDF mediante iReports">
        case "Imprimir2": {
            try {
                int id = Integer.parseInt(request.getParameter("id"));
                String source = url + "/reports/newReport1.jrxml";
                JasperPrint jasperPrint = null;
                JasperReport jasperReport = null;
                JasperDesign jasperDesign = null;
                System.out.println(source);
                String reportPath = request.getServletContext().getRealPath("reports") + "\\newReport1.jrxml";
                jasperDesign = JRXmlLoader.load(reportPath);
                jasperReport = JasperCompileManager.compileReport(jasperDesign);
                jasperPrint = JasperFillManager.fillReport(jasperReport, reporte(id),
                        daoModelCompra.getConnection());
                JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
            } catch (Exception ex) {
                for (StackTraceElement ruta : ex.getStackTrace()) {
                    System.err.println(ruta);
                }
            }
        }
            break;
        //</editor-fold>

        }
    }

}

From source file:Controller.ControllerVenta.java

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.//from   w ww  .j  ava  2s .c o m
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    if (request.getParameter("action") != null) {
        String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
                + request.getContextPath();
        String action = request.getParameter("action");
        switch (action) {
        case "Registrar": {
            String documentoUsuario = (request.getParameter("documentoUsuario"));
            String documentoCliente = null;
            String nombreCliente = null;
            int numeroVenta = 0;
            if (Validador.validarDocumento(request.getParameter("documentoCliente"))
                    & Validador.validarNombresCompletos(request.getParameter("txtNombreCliente"))
                    & Validador.validarNumero(request.getParameter("txtNumeroVenta"))) {
                documentoCliente = (request.getParameter("documentoCliente"));
                nombreCliente = (request.getParameter("txtNombreCliente"));
                numeroVenta = Integer.parseInt(request.getParameter("txtNumeroVenta"));
            } else {
                response.setContentType("application/json");
                response.setCharacterEncoding("UTF-8");
                response.getWriter().write(Mensaje(false, null, "Ha ingresado datos incorrectos"));
                break;
            }

            int lenght = Integer.parseInt(request.getParameter("size"));
            int totalCompra = Integer.parseInt(request.getParameter("txtTotalVenta"));
            listOjbDetalleMovimientos = new ArrayList<>();
            for (int i = 0; i < lenght; i++) {
                _objDetalleMovimiento = new ObjDetalleMovimiento();
                _objDetalleMovimiento
                        .setIdArticulo(Integer.parseInt(request.getParameter("lista[" + i + "][idArticulo]")));
                _objDetalleMovimiento
                        .setCantidad(Integer.parseInt(request.getParameter("lista[" + i + "][cantidad]")));
                _objDetalleMovimiento.setPrecioArticulo(
                        Integer.parseInt(request.getParameter("lista[" + i + "][precioArticulo]")));
                _objDetalleMovimiento.setTotalDetalleMovimiento(
                        _objDetalleMovimiento.getCantidad() * _objDetalleMovimiento.getPrecioArticulo());
                _objDetalleMovimiento.setDescuento(lenght);
                listOjbDetalleMovimientos.add(_objDetalleMovimiento);
            }
            _objUsuario.setDocumentoUsuario(documentoUsuario);
            _objVenta.setIdVenta(numeroVenta);
            _objVenta.setDocumentoCliente(documentoCliente);
            _objVenta.setNombreCliente(nombreCliente);
            _objVenta.setTotalVenta(totalCompra);
            daoModelVenta = new ModelVenta();
            String salida = Mensaje(daoModelVenta.Add(_objVenta, _objUsuario, listOjbDetalleMovimientos),
                    "La venta ha sido registrada", "Ha ocurrido un error");
            daoModelVenta.Signout();
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(salida);
            break;
        }
        case "Consultar": {
            int id = Integer.parseInt(request.getParameter("id"));
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(consultarDetalle(id));
            break;
        }
        case "Enlistar": {
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(getTableVenta());
            break;
        }
        case "Contador": {
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(getContador());
            break;
        }
        case "Imprimir": {
            response.setContentType("application/pdf");
            try {
                Locale loc = Locale.getDefault();
                NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(loc);
                //Primero obtengo el id del Movimiento
                int id = Integer.parseInt(request.getParameter("id"));
                //Obtengo el reporte a manera de Map
                Map material = reporte(id);
                //Topo ese reporte y lo divido, primero en la compra y luego el detalle
                Map<String, String> venta = (Map) material.get("Venta");
                List<Map> detalle = (List) material.get("Detalle");
                //Creo el documento y obtengo el canal de comunicacion con el servidor, para luego enviar el documento.
                Document document = new Document();
                OutputStream os = response.getOutputStream();
                //Creo una instancia a partir del documento y del canal
                PdfWriter.getInstance(document, os);
                //Abro el documento
                document.open();
                Image logo = Image.getInstance(url + "/public/images/logo.png");
                logo.scaleAbsolute(new Rectangle(logo.getPlainWidth() / 4, logo.getPlainHeight() / 4));
                document.add(logo);
                //Creo una fuente para la letra en negrilla
                final Font helveticaBold = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);
                //Escribo y agrego un primer parrafo con los datos basicos de la compra         
                Paragraph headerDerecha = new Paragraph();
                headerDerecha.add(new Chunk("Id. de la Venta: ", helveticaBold));
                headerDerecha.add(new Chunk(venta.get("numeroVenta") + "\n"));
                headerDerecha.add(new Chunk("Nombre del Cliente: ", helveticaBold));
                headerDerecha.add(new Chunk(venta.get("nombreCliente") + "\n"));
                headerDerecha.add(new Chunk("Documento del Cliente: ", helveticaBold));
                headerDerecha.add(new Chunk(venta.get("documentoCliente") + "\n"));
                headerDerecha.add(new Chunk("Fecha Venta: ", helveticaBold));
                headerDerecha.add(new Chunk(venta.get("fechaVenta") + "\n"));
                //Escribo y agrego un segundo parrafo con los datos basicos de Stelarte  
                Paragraph headerIzquierda = new Paragraph();
                headerIzquierda.add(new Chunk("Stelarte.Decoracion \n", helveticaBold));
                headerIzquierda.add(new Chunk("Direccin: ", helveticaBold));
                headerIzquierda.add(new Chunk("Calle Falsa 123 # 12a34\n"));
                headerIzquierda.add(new Chunk("Telfono: ", helveticaBold));
                headerIzquierda.add(new Chunk("2583697 \n"));
                //Agrego los dos anteriores parrafos al Header
                PdfPTable header = new PdfPTable(2);
                header.getDefaultCell().setBorder(0);
                header.addCell(headerIzquierda);
                header.addCell(headerDerecha);
                header.setWidthPercentage(100f);
                header.setSpacingAfter(20);
                document.add(header);
                //Creo la tabla del detalle
                PdfPTable tablaDetalle = new PdfPTable(new float[] { 1, 3, 2, 2 });
                tablaDetalle.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
                //Creo el titulo, le quito el borde, le digo que ocupara cuatro columnas y que ser centrado
                PdfPCell tituloCell = new PdfPCell(new Phrase("Detalle de Venta", helveticaBold));
                tituloCell.setBorder(0);
                tituloCell.setColspan(4);
                tituloCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                tablaDetalle.addCell(tituloCell);
                //Aqui creo cada cabecera
                tablaDetalle.getDefaultCell().setBackgroundColor(BaseColor.LIGHT_GRAY);
                tablaDetalle.addCell(new Phrase("ID", helveticaBold));
                tablaDetalle.addCell(new Phrase("Nombre", helveticaBold));
                tablaDetalle.addCell(new Phrase("Cantidad", helveticaBold));
                tablaDetalle.addCell(new Phrase("Valor", helveticaBold));
                tablaDetalle.getDefaultCell().setBackgroundColor(null);
                //Aqui agrego la tabla cada articulo.
                for (Map<String, String> next : detalle) {
                    tablaDetalle.addCell(next.get("idArticulo"));
                    tablaDetalle.addCell(next.get("descripcionArticulo"));
                    tablaDetalle.addCell(next.get("cantidad"));
                    tablaDetalle
                            .addCell(currencyFormatter.format(Integer.parseInt(next.get("precioArticulo"))));
                }
                //Creo el Footer
                headerIzquierda = new Paragraph();
                headerIzquierda.add(new Chunk("Total: ", helveticaBold));
                headerIzquierda
                        .add(new Chunk(currencyFormatter.format(Integer.parseInt(venta.get("totalVenta")))));
                PdfPCell footerCell = new PdfPCell(headerIzquierda);
                footerCell.setBorder(0);
                footerCell.setColspan(4);
                footerCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                tablaDetalle.addCell(footerCell);
                //Establesco el tamao  y posicion de la tabla, luego la agrego al documento
                tablaDetalle.setWidthPercentage(100f);
                tablaDetalle.setHorizontalAlignment(Element.ALIGN_RIGHT);
                document.add(tablaDetalle);
                //Cierro el documento y lo envio con flush.
                document.close();
                response.setHeader("Content-Disposition", "attachment;filename=\"reporte.pdf\"");
                os.flush();
                os.close();
            } catch (DocumentException de) {
                throw new IOException(de.getMessage());
            }
            break;
        }
        }
    }
}