Cómo crear un archivo PDF en Java con filas de colores alternativos y una imagen en la parte superior

Estoy generando un archivo pdf usando el com.itextpdf.text.*siguiente es mi código que crea el archivo pdf con título y encabezado resaltados y filas, lo que quería hacer es crear un archivo pdf con imagen en la parte superior y filas con colores alternativos, cómo hacer esto en utilizandocom.itextpdf.text.*

response.setHeader("Content-disposition", "attachment; filename=\"" + reportName + ".pdf\"");
        response.setContentType("application/pdf");
        PdfWriter.getInstance(document,response.getOutputStream());

        try {
            document.open();
            addTitlePage(document, reportName);

            //float[] colsWidth = {1.5f,3f,4f,4f,2f};

            List<Float> colsWidth = new ArrayList<Float>();
            int iterator = 1;
           while (iterator <= headerMap.size()) {
               if(iterator==1){
                   colsWidth.add(1.5f); 
               }else{
                colsWidth.add(3f); 
               }
                iterator++;
            }
           float[] floatArray = ArrayUtils.toPrimitive(colsWidth.toArray(new Float[0]), 0.0F);

           PdfPTable table = new PdfPTable(floatArray);
            table.setWidthPercentage(98);
            table.setHorizontalAlignment(Element.ALIGN_CENTER);

            PdfPCell c1 = new PdfPCell();
            for (Iterator it = headerMap.keySet().iterator(); it.hasNext();) {
                String headerName = (String) headerMap.get(it.next());
                c1 = new PdfPCell(new Phrase(headerName, headerFont));
                c1.setBackgroundColor(BaseColor.LIGHT_GRAY);
                table.addCell(c1);
            }
            table.setHeaderRows(1);
            table = custDAO.creadPDFTable(query, table);
            document.add(table);
            document.addAuthor(userViewModel.getUsername());
            document.addCreationDate();
            document.addCreator("POC");
            document.close();
            response.flushBuffer();

public PdfPTable creadPDFTable(String query,PdfPTable table){
        int numberOfColumns=0,sno=1;
        Connection connection = getConnection();
        if (connection != null) {
            try {
                PreparedStatement reportTablePS = connection.prepareStatement(query);
                ResultSet reportTable_rst = reportTablePS.executeQuery();
                ResultSetMetaData reportTable_rsmd = reportTable_rst.getMetaData();
                numberOfColumns = reportTable_rsmd.getColumnCount();
                while (reportTable_rst.next()) {
                    table.addCell(new PdfPCell(new Paragraph(String.valueOf(sno), textFont)));
                            for (int columnIterator = 1; columnIterator <= numberOfColumns; columnIterator++) {
                                 String column = reportTable_rst.getString(columnIterator);
                                 table.addCell(new PdfPCell(new Paragraph(column, textFont)));
                            }
                            sno++;
            }
            } catch (Exception ex) {
                ex.printStackTrace();
            }finally {
                try {
                    closeConnection(connection, null, null);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        return table;
    }

private static void addTitlePage(Document document, String reportName) throws DocumentException {
        Paragraph preface = new Paragraph();
        addEmptyLine(preface, 1);
        /**
         * Lets write a big header
         */
        Paragraph paragraph = new Paragraph(reportName, titleFont);
        paragraph.setAlignment(Element.ALIGN_CENTER);
        document.add(paragraph);

        /**
         * Add one empty line
         */
        addEmptyLine(preface, 1);
        document.add(preface);
    }
    private static void addEmptyLine(Paragraph paragraph, int number) {
        for (int i = 0; i < number; i++) {
            paragraph.add(new Paragraph(" "));
        }
    }

cuando uso lo siguiente, obtengo la siguiente excepción 'getoutputstream () ya ha pedido esta respuesta'

Quería usar esto para insertar la imagen.

            Image image = Image.getInstance(path+"images/abi.png");
            image.setAbsolutePosition(40f, 770f);
            image.scaleAbsolute(70f, 50f);
            document.add(image);

Entonces, ¿cómo hacer para hacer esto?

ACTUALIZACIÓN

quiero crear un archivo pdf como este, solo quiero agregar una imagen en la parte superior y filas con colores alternativos como este.

Respuesta 1

http://what-when-how.com/itext-5/decorating-tables-using-table-and-cell-events-itext-5/


(fuente: what-when-how.com )


(fuente: what-when-how.com )

Respuesta: 2

¿Alguien sabe la razón por la que Flux.onErrorContinue argumentos como el siguiente tipo: public final Flux <T> onErrorContinue (BiConsumer <Throwable, Object> errorConsumer) {...} en su lugar ...

¿Hay alguna forma de que pueda obtener la dirección IP original del cliente que viene al servidor desde org.springframework.web.context.request.WebRequest?

Estoy usando el método toJson () de Gson 2.2 para serializar un objeto java en una cadena json. El objeto java es de tipo: public class LOB implementa Serializable {private int id; tipo LOBType privado; ...

Estoy tratando de trabajar a través de la guía de inicio de Arquillian. Todo funciona bien siempre que use un contenedor arquillian-weld-ee-embedded. Sin embargo, cuando intento cambiar a Glassfish-Managed, me sale ...