Gonzalez,

Probably more than you need but here is an example:

package com.wrappedapps.boutique.view.admin;

import java.io.*;
import java.util.*;
import java.text.*;
import java.awt.Color;
import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.struts.action.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.lowagie.text.*;
import com.lowagie.text.pdf.codec.GifImage;
import com.lowagie.text.pdf.PdfWriter;

import com.wrappedapps.boutique.Constants;
import com.wrappedapps.boutique.business.*;
import com.wrappedapps.boutique.persistancy.*;

public class BuildTransactionSearchPDFAction extends Action
{
        // Logging support
        private static final Log m_log =
LogFactory.getLog(BuildTransactionSearchPDFAction.class);

        public ActionForward execute(ActionMapping mapping, ActionForm
form, HttpServletRequest request, HttpServletResponse response)
        {
                HttpSession session = request.getSession();
                ServletContext context = servlet.getServletContext();
                IDataAccess dao = DataAccessObject.getInstance();
                BoutiqueConfig config = (BoutiqueConfig)
session.getAttribute(Constants.BOUTIQUE_CONFIG);
                
                //Fetch transactions
                ArrayList transIds =
(ArrayList)session.getAttribute(Constants.TRANSACTION_SEARCH_RESULT);

                //Get requested Transactions and place Collection in
request
                ArrayList transactions = new ArrayList();
                for (int i = 0; i < transIds.size(); ++i)
                {
                        Integer tI = (Integer) transIds.get(i);
                        int transId = tI.intValue();
                        TransactionRecord tr =
dao.getTransaction(transId);
                        transactions.add(tr);
                }
                
                //Create TransactionSearch pdf and print to
ByteArrayOutputStream
                //step 1: creation of a document-object
                Document document = new Document(PageSize.A4, 50, 50,
50, 50);
                ByteArrayOutputStream baos = new
ByteArrayOutputStream();
                
                try
                {
                        // step 2:
                        PdfWriter.getInstance(document, baos);
                        // step 3: we open the document
                        document.open();
                        
                        // Text fonts
                        Font boldWhite = new Font(Font.HELVETICA, 8,
Font.BOLD, Color.WHITE);
                        Font boldBlack = new Font(Font.HELVETICA, 8,
Font.BOLD, Color.BLACK);
                        //Table BG colors
                        Color even = new Color(92, 124, 177);
                        Color odd = new Color(64, 91, 134);
                        
                        // step 4: Build header with branding logo, date
and # of transactions
                        Table hdrTbl = buildHeaderTable(config,
transactions.size(), boldBlack);
                        document.add(hdrTbl);                   
                        
                        //Create a new Table presenting each
TransactionRecord
                        for(int i = 0; i < transactions.size(); ++i)
                        {
                                TransactionRecord tr =
(TransactionRecord)transactions.get(i);
                                CustomerInfo cust = tr.getCustomer();
                                boolean isEven = ((i % 2) == 0);
                                
                                //Build encapsulating table
                                Table transT = new Table(2);
                                transT.setWidth(80);
                                transT.setWidths(new int[]{5, 75});
                                transT.setSpacing(1);
                                transT.setBorder(Rectangle.NO_BORDER);
        
transT.setAlignment(Element.ALIGN_CENTER);
                                transT.setTableFitsPage(true);
                                
                                //Numbered Transaction Cell
                                Cell tnC = new Cell(new Phrase("" + (i +
1) + ".", boldBlack));
                                tnC.setBorder(Rectangle.NO_BORDER);
        
tnC.setVerticalAlignment(Element.ALIGN_TOP);
        
tnC.setHorizontalAlignment(Element.ALIGN_CENTER);
                                transT.addCell(tnC);
                                
                                //Build TransactionRecord Table
                                Table trT = new Table(2, 7);
                                trT.setWidth(75);   // percentage
                                trT.setSpacing(1);
                                trT.setWidths(new int[] {13, 62});  //
percentage

                                trT.setAlignment(Element.ALIGN_CENTER);
                                trT.setBorderWidth(0);
                                trT.setBorderColor(Color.BLACK);
                                trT.setBorder(1);
                                trT.setTableFitsPage(true);
                        
                                //Date Row
                                //Label
                                Cell dateLbl = new Cell(new Phrase("Date
: ", boldWhite));
                                dateLbl.setHeader(true);
                                dateLbl.setBackgroundColor((isEven)?
even: odd);
                                trT.addCell(dateLbl);   
                                //Value
                                Cell dateVal = new Cell(new
Phrase(tr.getDateStr(), boldBlack));
                                dateVal.setHeader(true);
                                dateVal.setBackgroundColor(Color.WHITE);
                                trT.addCell(dateVal);
                                
                                //Reference # Row
                                //Label
                                Cell refLbl = new Cell(new
Phrase("Reference # : ", boldWhite));
                                refLbl.setHeader(true);
                                refLbl.setBackgroundColor((isEven)?
even: odd);
                                trT.addCell(refLbl);   
                                //Value
                                Cell refVal = new Cell(new Phrase("" +
tr.getReferenceNo(), boldBlack));
                                refVal.setHeader(true);
                                refVal.setBackgroundColor(Color.WHITE);
                                trT.addCell(refVal);
                                
                                //Account # Row
                                //Label
                                Cell acctLbl = new Cell(new
Phrase("Account # : ", boldWhite));
                                acctLbl.setHeader(true);
                                acctLbl.setBackgroundColor((isEven)?
even: odd);
                                trT.addCell(acctLbl);   
                                //Value
                                Cell acctVal = new Cell(new Phrase("" +
tr.getAccountId(), boldBlack));
                                acctVal.setHeader(true);
                                acctVal.setBackgroundColor(Color.WHITE);
                                trT.addCell(acctVal);
                                
                                //Serial Number Row
                                //Label
                                Cell serLbl = new Cell(new
Phrase("Serial # :", boldWhite));
                                serLbl.setHeader(true);
                                serLbl.setBackgroundColor((isEven)?
even: odd);
                                trT.addCell(serLbl);   
                                //Value
                                Cell serVal = new Cell(new
Phrase(tr.getInstance().getId(), boldBlack));
                                serVal.setHeader(true);
                                serVal.setBackgroundColor(Color.WHITE);
                                trT.addCell(serVal);
                                
                                //Amount Row
                                //Label
                                Cell amtLbl = new Cell(new
Phrase("Amount : ", boldWhite));
                                amtLbl.setHeader(true);
                                amtLbl.setBackgroundColor((isEven)?
even: odd);
                                trT.addCell(amtLbl);   
                                //Value
                                Cell amtVal = new Cell(new
Phrase(tr.getAmountStr(), boldBlack));
                                amtVal.setHeader(true);
                                amtVal.setBackgroundColor(Color.WHITE);
                                trT.addCell(amtVal);
                                
                                //Product Row
                                //Label
                                Cell prodLbl = new Cell(new
Phrase("Product : ", boldWhite));
                                prodLbl.setHeader(true);
                                prodLbl.setBackgroundColor((isEven)?
even: odd);
                                trT.addCell(prodLbl);   
                                //Value
                                //Build Product Table
                                Table prodTbl = buildProductTable(tr,
boldBlack);
                                trT.insertTable(prodTbl);
                                
                                //Customer Row
                                //Label
                                Cell custLbl = new Cell(new
Phrase("Customer : ", boldWhite));
                                custLbl.setHeader(true);
                                custLbl.setBackgroundColor((isEven)?
even: odd);
                                trT.addCell(custLbl);   
                                //Value
                                Table custTbl = buildCustomerTable(tr,
boldBlack);
                                trT.insertTable(custTbl);
                                                                
                                //Add TransactionRecord Table to
trasaction table
                                transT.insertTable(trT);
                                //Add Table to document
                                document.add(transT);
                                //Spacer
                                //document.add(new Phrase(" ",
boldWhite));
                        }

                        
                        // step 5: we close the document
                        document.close();
                        
                        //Now Write the PDF to OutputStream
                        //Remove any header info set by Struts primarily
the Cache-Control
                        response.reset();
        
response.setHeader("Content-Disposition","inline;filename=TransactionRep
ort.pdf");
                        response.setContentType("application/pdf");
                        response.setContentLength(baos.size());
                        ServletOutputStream out =
response.getOutputStream();
                        baos.writeTo(out);
                        out.flush();                    
                }
                catch (Exception e)
                {
                        if(m_log.isErrorEnabled())
                                m_log.error("BUILDING TRANSACTION PDF: "
+ e); 
                }               

                return null;
        }
        
        private Table buildProductTable(TransactionRecord tr, Font font)
                throws BadElementException, DocumentException
        {       
                InstanceInfo inst = tr.getInstance();
                        
                Table prodTbl = new Table(2, 4);
                prodTbl.setWidth(100);
                prodTbl.setWidths(new int[]{10, 90});
                prodTbl.setBorderWidth(1);
                
                //Product Name Row
                String pName = inst.getPackageName() + " (" +
inst.getTermName() + ")";
                Cell prodName = new Cell(new Phrase(pName, font));
                prodName.setColspan(2);
                prodTbl.addCell(prodName);
                //Service Provider Row
                String sp = inst.getInstanceManager();
                Cell im = new Cell(new Phrase(sp, font));
                im.setColspan(2);
                prodTbl.addCell(im);
                //Hits Row
                //Label
                Cell hitsLbl = new Cell(new Phrase("Hits : ", font));
                hitsLbl.setBorder(Rectangle.NO_BORDER);
                prodTbl.addCell(hitsLbl);   
                //Value
                Cell hitsVal = new Cell(new Phrase(tr.getHits(), font));
                prodTbl.addCell(hitsVal);
                //Term Row
                //Label
                Cell termLbl = new Cell(new Phrase("Term : ", font));
                prodTbl.addCell(termLbl);   
                //Value
                Cell termVal = new Cell(new Phrase(tr.getTerm(), font));
                prodTbl.addCell(termVal);
                
                return prodTbl;
        }
        
        private Table buildCustomerTable(TransactionRecord tr, Font
font)
                throws BadElementException, DocumentException
        {       
                CustomerInfo cust = tr.getCustomer();
                        
                Table custTbl = new Table(2, 8);
                custTbl.setWidth(100);
                custTbl.setWidths(new int[]{50,50});
                custTbl.setBorderWidth(1);
                
                //Cust Name
                String cName = cust.getFirstName() + " " +
cust.getLastName();
                Cell custName = new Cell(new Phrase(cName, font));
                custName.setColspan(2);
                custName.setHorizontalAlignment(Element.ALIGN_CENTER);
                custTbl.addCell(custName);
                //Company
                Cell company = new Cell(new Phrase(cust.getCompany(),
font));
                company.setColspan(2);
                company.setHorizontalAlignment(Element.ALIGN_CENTER);
                custTbl.addCell(company);
                //Address
                Cell address = new Cell(new Phrase(cust.getAddress(),
font));
                address.setColspan(2);
                address.setHorizontalAlignment(Element.ALIGN_CENTER);
                custTbl.addCell(address);
                //City/State
                Cell city = new Cell(new Phrase(cust.getCity()+ " ," +
cust.getState(), font));
                city.setColspan(2);
                city.setHorizontalAlignment(Element.ALIGN_CENTER);
                custTbl.addCell(city);
                //Zip Code
                Cell zip = new Cell(new Phrase(cust.getZip(), font));
                zip.setColspan(2);
                zip.setHorizontalAlignment(Element.ALIGN_CENTER);
                custTbl.addCell(zip);
                //Country
                Cell country = new Cell(new Phrase(cust.getCountry(),
font));
                country.setColspan(2);
                country.setHorizontalAlignment(Element.ALIGN_CENTER);
                custTbl.addCell(country);
                //Phone
                Cell phone = new Cell(new Phrase(cust.getPhone(),
font));
                phone.setColspan(2);
                phone.setHorizontalAlignment(Element.ALIGN_CENTER);
                custTbl.addCell(phone);
                //Email
                Cell email = new Cell(new Phrase(cust.getEmail(),
font));
                email.setColspan(2);
                email.setHorizontalAlignment(Element.ALIGN_CENTER);
                custTbl.addCell(email);
                                
                return custTbl;
        }
        
        private Table buildHeaderTable(BoutiqueConfig config, int
transactions,
                                        Font font)
                throws BadElementException, DocumentException,
IOException
        {       
                Table hdrTbl = new Table(2, 2);
                hdrTbl.setWidth(100);
                hdrTbl.setBorder(Rectangle.NO_BORDER);
                hdrTbl.setBorderWidth(0);
                        
                //Image and date Row
                byte[] imgData = config.getBrandingImage();
                //Logo Cell
                Cell imgC = new Cell();
                imgC.setBorder(Rectangle.NO_BORDER);
                if(imgData != null)
                {
                        GifImage logo = new GifImage(imgData);
                        Image img = logo.getImage(1);
                        imgC.addElement(img);
                }
                hdrTbl.addCell(imgC);
                //Date Cell
                SimpleDateFormat sdf = new
SimpleDateFormat(Constants.SHORT_DATE);
                Date now = new Date(System.currentTimeMillis());
                Phrase date = new Phrase(sdf.format(now), font);
                Cell dateC = new Cell(date);
                dateC.setBorder(Rectangle.NO_BORDER);
                dateC.setVerticalAlignment(Element.ALIGN_TOP);
                dateC.setHorizontalAlignment(Element.ALIGN_RIGHT);
                hdrTbl.addCell(dateC);
                //Transaction Label
                Cell totalC = new Cell(new Phrase("Total Transactions :
" + transactions, font));                       
                totalC.setBorder(Rectangle.NO_BORDER);
                totalC.setColspan(2);
                totalC.setHorizontalAlignment(Element.ALIGN_CENTER);
                hdrTbl.addCell(totalC);
                                
                return hdrTbl;
        }
        
        
}

HTH,

Greg
> -----Original Message-----
> From: Gonzalez Comesaña [mailto:Gonzalez Comesaña]
> Sent: Thursday, November 06, 2003 8:27 AM
> To: Struts Users Mailing List; [EMAIL PROTECTED]
> Subject: Struts + itext
> 
> Someone  have  an example of struts  with itext  or itext with struts
???
> --
> 
> 
> 
>
------------------------------------------------------------------------
--
> ------
> Aquest missatge electrònic pot  contenir informació confidencial o
> privilegiada.
> Si vostè no és el destinatari del  missatge, o l'ha rebut per error,
si us
> plau
> notifiqui-ho al remitent i destrueixi el missatge amb tot el seu
> contingut.
> Està completament  prohibida  qualsevol  còpia, ús o distribució no
> autoritzada
> del contingut d'aquest missatge electrònic.
>
------------------------------------------------------------------------
--
> ------
> Este mensaje electrónico puede contener información confidencial o
> privilegiada.
> Si usted  no es  el destinatario de este mensaje o lo ha recibido por
> error, por
> favor notifíquelo al remitente y destruya el mensaje con todo su
> contenido.
> Queda  expresamente  prohibida  cualquier  copia, utilización o
> distribución no
> autorizada del contenido de este mensaje electrónico.
>
------------------------------------------------------------------------
--
> ------
> This e-mail may contain confidential and/or privileged information.
> If you  are  not the  intended recipient (or have received this e-mail
in
> error)
> please notify the sender immediately and destroy this e-mail.
> Any  unauthorized  copying,  disclosure  or distribution of the
material
> in this
> e-mail is strictly forbidden.
>
------------------------------------------------------------------------
--
> ------
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to