Quoting "Kenny G. Dubuisson, Jr." <[EMAIL PROTECTED]>:

> Sounds great but way over my head :P...would you mind sharing your code for
> me to look at.  Thanks so much Bruno.

OK, as promised.
I made a reduced (UNTESTED) version of what I do normally in the
case I have to let the user wait for a document.

It might not work directly, you may have to change some things.
It would be nice if you could turn it into an example I can put
on my site:

CLASS MyPdfGenerator

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

public class MyPdfGenerator implements Runnable {

        public static final int NOT_STARTED = 0;
        public static final int BUSY = 1;
        public static final int FINISHED = 2;
        public static final int ABORTED = 3;

        private int status = NOT_STARTED;
        private int counter = 0;
        private static final int TOTAL = 1000;
        private ByteArrayOutputStream ba = new ByteArrayOutputStream();

        /**
         * @see java.lang.Runnable#run()
         */
        public void run() {
                try {
                        status = BUSY;
                        Document document = new Document();
                        PdfWriter.getInstance(document, ba);
                        document.open();
                        while (counter < TOTAL) {
                                document.add(new Paragraph(String.valueOf(counter)));
                                counter++;
                        }
                        document.close();
                        status = FINISHED;
                }
                catch(DocumentException de) {
                        status = ABORTED;
                }
        }
        
        public int getPercentage() {
                return counter / TOTAL;
        }

        public boolean isBusy() {
                return status == BUSY;
        }
        
        public boolean isFinished() {
                return status == FINISHED;
        }
        
        public boolean isAborted() {
                return status == ABORTED;
        }
        
        public int getStatus() {
                return status;
        }
        
        public int size() {
                return ba.size();
        }
        
        public void writePdf(OutputStream out) throws IOException {
                ba.writeTo(out);
        }
}


CLASS PleaseWaitServlet

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class PleaseWaitServlet extends HttpServlet {

        /**
         * @see javax.servlet.http.HttpServlet#service(HttpServletRequest,
HttpServletResponse)
         */
        protected void service(HttpServletRequest request, HttpServletResponse 
response)
                throws ServletException, IOException {
                HttpSession session = request.getSession(true);
                MyPdfGenerator generator = (MyPdfGenerator) 
session.getAttribute("PDF");
                if (generator == null) {
                        response.setHeader("Refresh", "3");
                        generator = new MyPdfGenerator();
                        Thread t = new Thread(generator);
                        t.start();
                        session.setAttribute("PDF", generator);
                        doHtmlOutput(response, "document generation was initialized; 
please wait");
                        return; 
                }
                if (generator.isBusy()) {
                        response.setHeader("Refresh", "3");
                        doHtmlOutput(response, "document generation is busy (" + 
generator.getPercentage()
+ "% done); please wait");
                        return;
                }
                if (generator.isFinished()) {
                        doPdfOutput(response, generator);
                        session.removeAttribute("PDF");
                        return;
                }
                if (generator.isAborted()) {
                        doHtmlOutput(response, "document generation was aborted, 
please contact your system
administrator.");
                        session.removeAttribute("PDF");
                        return;
                }
        }
        
        protected void doHtmlOutput(HttpServletResponse response, String message) 
throws
IOException {
                response.setContentType("Text/html");   
                PrintWriter out = response.getWriter(); 
                out.println("<html><body>");
                out.println(message);
                out.println("</body></html>");
                out.flush();
                out.close();
        }
        
        protected void doPdfOutput(HttpServletResponse response, MyPdfGenerator
generator) throws IOException {
                response.setContentType("application/pdf");
                response.setContentLength(generator.size());
                ServletOutputStream out = response.getOutputStream();
                generator.writePdf(out);
        }

}


-------------------------------------------------------
This SF.net email is sponsored by:Crypto Challenge is now open! 
Get cracking and register here for some mind boggling fun and 
the chance of winning an Apple iPod:
http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0031en
_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Reply via email to