Re: PDF's sent through tomcat/apache
On Apr 6, 7:06 am, Ulf <ulf.he...@gmail.com> wrote:
For my project I have a servlet that looks like below to send pdf
files.
I can't tell if it works in all cases, because my project is under
development, and so far I have only tried with small files.
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
OutputStream out = response.getOutputStream();
ByteArrayOutputStream bs = myPdfLib.getPdf();
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-
check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setContentLength(bs.size());
bs.writeTo(out);
out.flush();
}
/Ulf
Mark / Ulf
I did a quick hack to see if the problem existed with a random pdf
file that wasnt dynamically generated. I also tried it on a stand
alone tomcat server with the same error. This only occurs with larger
PDF files mind you.
Heres my code:
FileInputStream fis = new FileInputStream(file);
byte[] buff = new byte[2048];
int bytesRead;
int bytes=0;
// This while loop is simply to get the amount of bytes being sent,
couldnt be bothered looking up a better way
while(-1 != (bytesRead = fis.read(buff, 0, buff.length)))
{
for(int i=0; i < buff.length; i++) if(buff[i]==1 ||
buff[i]==0)bytes++;
for(int i=0; i < buff.length; i++) buff[i] = -1;
}
resp.setContentLength(bytes);
resp.setContentType("application/pdf");
resp.setHeader("Content-disposition", "filename=List.pdf");
while(-1 != (bytesRead = fis.read(buff, 0, buff.length)))
{
resp.getOutputStream().write(buff, 0, bytesRead);
}
I know its a messy hack, but i only wanted a quick test. Problem still
exists. If you want to test it on your own tomcat have a go. You
should be able to copy paste the code into an action and have it work
fine. I would assume any large pdf would do, i can't send out the
PDF's we have here as it contains copywrite information. Sorry.
As always any help is greatly appreciated!
Graeme