I wrote a small servlet that went through PDF's byte by byte sending them to the output stream. It also looked for default values in PDF form fields and replaced them with parameters sent in by the request. Here's a slice of the code, but it's the part that loads the PDF file. The actual writing of the bytes to the OutputStream occurs in fillTemplateFileWithValues(), a portion of which is below.
public void doGet( HttpServletRequest req, HttpServletResponse res ) throws ServletException, IOException { res.setContentType( "application/pdf" ); try { InputStream template = getServletContext().getResourceAsStream( processPath(req) + ".pdf" ); OutputStream custom = res.getOutputStream(); PDFConverter convert = new PDFConverter( template, custom, buildParameterMap(req) ); convert.fillTemplateFileWithValues(); res.setContentLength( convert.getBytesSent() ); template.close(); custom.close(); } catch ( FileNotFoundException fnfe ) { fnfe.printStackTrace(); } catch ( SecurityException se ) { se.printStackTrace(); } catch ( InvalidStreamException ise ) { ise.printStackTrace(); } } This is the loop that outputs the PDF bytes that are definitely not going to be replaced. Another loop looks for strings to replace. while ( !inString && (lastByteRead != EOF) ) { try { lastByteRead = templateFile.read(); } catch (IOException ioe) { ioe.printStackTrace(); lastByteRead = EOF; break; } // If we hit EOF, get out of this loop. // The others will take care of themselves. if( lastByteRead == EOF ) { break; // Found the start of a string } else if( lastByteRead == '(' ) { inString = true; } try { convertedFile.write( lastByteRead ); bytesSent = bytesSent + 1; } catch (IOException ioe) { ioe.printStackTrace(); lastByteRead = EOF; break; } } You could probably do this a lot simpler because you aren't replacing any PDF content, but this code's worked well for me. I don't know if it will solve your problem, though. It certainly doesn't stream it on a one-page-at-a-time basis, and it wouldn't display for us until we called setContentLength(). Of course, if you know that ahead of time (we can't for replacing), then you might luck out. Hope that helps... Tim >>> [EMAIL PROTECTED] 11/14/01 03:59PM >>> Yes. It's not only possible, but support for it is built in to most modern web servers. The PDF has to be "optimized" for byte-serving and the web server has to be capable of byte-serving. So my question remains. Anyone out there done it or know how to configure Tomcat 4 to do it? -T -----Original Message----- From: Chris Tucker [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 14, 2001 5:48 PM To: Tomcat Users List Subject: RE: Byte Serving PDF's Is this even possible? From my understanding of the PDF format, it is inherently random-access and relies on the entire file being available before it can be displayed. -----Original Message----- From: MacDonald, Todd [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 14, 2001 2:24 PM To: 'Tomcat Users List' Subject: RE: Byte Serving PDF's The PDF's are pre-existing. I need to "byte serve" them (for page-at-a-time access via the Acrobat Reader plug-in in the client's browser). Currently we have a servlet that reads the file and streams the whole thing back. Some of the PDF's are quite large (13 megs). This means that the user has to wait until all 13 megs are received before s/he can view it. Byte-serving solves that problem, I just don't know how to do it. -T -----Original Message----- From: Jim Urban [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 14, 2001 4:54 PM To: Tomcat Users List Subject: RE: Byte Serving PDF's Do you want to dynamically generate the PDF on the fly and return it directly to the browser or to simply "serve" PDF files? If you want to do the first, check out the FOP website and have a look at the FOPServlet source code. This assumes you can make the contents of the PDF available in XML format for processing by FOP. Jim -----Original Message----- From: MacDonald, Todd [mailto:[EMAIL PROTECTED]] Sent: Wednesday, November 14, 2001 1:53 PM To: Tomcat-User (E-mail) Subject: Byte Serving PDF's Anyone know how (or better yet, have some code to) byte serve PDF's through Tomcat 4? -T -- To unsubscribe: <mailto:[EMAIL PROTECTED]> For additional commands: <mailto:[EMAIL PROTECTED]> Troubles with the list: <mailto:[EMAIL PROTECTED]> -- To unsubscribe: <mailto:[EMAIL PROTECTED]> For additional commands: <mailto:[EMAIL PROTECTED]> Troubles with the list: <mailto:[EMAIL PROTECTED]> -- To unsubscribe: <mailto:[EMAIL PROTECTED]> For additional commands: <mailto:[EMAIL PROTECTED]> Troubles with the list: <mailto:[EMAIL PROTECTED]> -- To unsubscribe: <mailto:[EMAIL PROTECTED]> For additional commands: <mailto:[EMAIL PROTECTED]> Troubles with the list: <mailto:[EMAIL PROTECTED]> -- To unsubscribe: <mailto:[EMAIL PROTECTED]> For additional commands: <mailto:[EMAIL PROTECTED]> Troubles with the list: <mailto:[EMAIL PROTECTED]> -- To unsubscribe: <mailto:[EMAIL PROTECTED]> For additional commands: <mailto:[EMAIL PROTECTED]> Troubles with the list: <mailto:[EMAIL PROTECTED]>