tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Timothy Shadel <shade...@mtc.byu.edu>
Subject RE: Byte Serving PDF's
Date Wed, 14 Nov 2001 23:12:16 GMT
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

>>> Todd_MacDonald@tvratings.com 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:ctucker@epangea.com] 
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:Todd_MacDonald@tvratings.com] 
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:jim.urban@netsteps.net] 
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:Todd_MacDonald@tvratings.com] 
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:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>



--
To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>

--
To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>


--
To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>

--
To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>


--
To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>


Mime
View raw message