You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Mark Lenz <ML...@piercemfg.com> on 2003/04/24 16:44:54 UTC

Stream PDF using servlet

I'm trying to stream a PDF to a browser using a servlet.  It works fine
using Mozilla.  But, sure enough, I just can't get it to work with IE
(great standards compliance!).  When I try to download the PDF through IE
(6.0), it asks me what I want to do (open or save the file).  If I choose
open I get an error "Internet Explorer was not able to open this Internet
site.  The request site is either unavailable or cannot be found.  Please
try again later.".  Here's the code from my servlet for streaming the PDF:

...
File pdf_file = new File("<path to file>");
if (!pdf_file.exists())
{
        //display error message
        ...
        return;
}
else
{
        int filesize = (int)pdf_file.length();
        res.setContentType("application/pdf");
        res.setContentLength(filesize);
        res.setHeader("Pragma", "no-cache");
        res.setHeader("Cache-Control", "no-cache");
        ServletOutputStream out = res.getOutputStream();

          byte[] data = new byte[filesize];
          DataInputStream in = new DataInputStream(new
FileInputStream(pdf_file));
          in.readFully(data);
          in.close();
          out.write(data);
          out.flush();
          out.close();
}
...

I must be missing a simple thing that IE requires.  Anyone have any ideas?
Thanks.

Mark Lenz
Pierce Manufacturing, Inc.
(920) 832-3523
mlenz@piercemfg.com

The information contained in this electronic mail message is confidential
information and intended only for the use of the individual or entity named
above, and may be privileged. If the reader of this message is not the
intended recipient, you are hereby notified that any dissemination,
distribution or copying of this communication is strictly prohibited. If
you have received this transmission in error, please contact the sender
immediately, delete this material from your computer and destroy all
related paper media. Please note that the documents transmitted are not
intended to be binding until a hard copy has been manually signed by all
parties.
Thank you.



---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Stream PDF using servlet

Posted by dwightHugget <ja...@concentric.net>.
    // MIME type for report
    res.setContentType( contentType );  

    res.setHeader("Content-disposition",
                  "attachment;filename=" + theFileName );



On Thursday 24 April 2003 10:44, Mark Lenz wrote:
> I'm trying to stream a PDF to a browser using a servlet.  It works fine
> using Mozilla.  But, sure enough, I just can't get it to work with IE
> (great standards compliance!).  When I try to download the PDF through IE
> (6.0), it asks me what I want to do (open or save the file).  If I choose
> open I get an error "Internet Explorer was not able to open this Internet
> site.  The request site is either unavailable or cannot be found.  Please
> try again later.".  Here's the code from my servlet for streaming the PDF:
>
> ...
> File pdf_file = new File("<path to file>");
> if (!pdf_file.exists())
> {
>         //display error message
>         ...
>         return;
> }
> else
> {
>         int filesize = (int)pdf_file.length();
>         res.setContentType("application/pdf");
>         res.setContentLength(filesize);
>         res.setHeader("Pragma", "no-cache");
>         res.setHeader("Cache-Control", "no-cache");
>         ServletOutputStream out = res.getOutputStream();
>
>           byte[] data = new byte[filesize];
>           DataInputStream in = new DataInputStream(new
> FileInputStream(pdf_file));
>           in.readFully(data);
>           in.close();
>           out.write(data);
>           out.flush();
>           out.close();
> }
> ...
>
> I must be missing a simple thing that IE requires.  Anyone have any ideas?
> Thanks.
>
> Mark Lenz
> Pierce Manufacturing, Inc.
> (920) 832-3523
> mlenz@piercemfg.com
>
> The information contained in this electronic mail message is confidential
> information and intended only for the use of the individual or entity named
> above, and may be privileged. If the reader of this message is not the
> intended recipient, you are hereby notified that any dissemination,
> distribution or copying of this communication is strictly prohibited. If
> you have received this transmission in error, please contact the sender
> immediately, delete this material from your computer and destroy all
> related paper media. Please note that the documents transmitted are not
> intended to be binding until a hard copy has been manually signed by all
> parties.
> Thank you.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org

-- 
Dwight Hugget
http://www.dmhEnterprise.com

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Stream PDF using servlet

Posted by John Turner <to...@johnturner.com>.
You can probably keep the Cache-Control header, but the Pragma header is 
flaky, especially with IE.  I wouldn't use it at all.

John

On Thu, 24 Apr 2003 07:46:20 -0700 (PDT), Lior Shliechkorn 
<li...@yahoo.com> wrote:

> Lucky for you I just fixed this problem recently. Take out the 
> setHeader(..) that have to do with the no-cache and try again.
>
> Mark Lenz <ML...@piercemfg.com> wrote:
> I'm trying to stream a PDF to a browser using a servlet. It works fine
> using Mozilla. But, sure enough, I just can't get it to work with IE
> (great standards compliance!). When I try to download the PDF through IE
> (6.0), it asks me what I want to do (open or save the file). If I choose
> open I get an error "Internet Explorer was not able to open this Internet
> site. The request site is either unavailable or cannot be found. Please
> try again later.". Here's the code from my servlet for streaming the PDF:
>
> ...
> File pdf_file = new File("
> ");
> if (!pdf_file.exists())
> {
> //display error message
> ...
> return;
> }
> else
> {
> int filesize = (int)pdf_file.length();
> res.setContentType("application/pdf");
> res.setContentLength(filesize);
> res.setHeader("Pragma", "no-cache");
> res.setHeader("Cache-Control", "no-cache");
> ServletOutputStream out = res.getOutputStream();
>
> byte[] data = new byte[filesize];
> DataInputStream in = new DataInputStream(new
> FileInputStream(pdf_file));
> in.readFully(data);
> in.close();
> out.write(data);
> out.flush();
> out.close();
> }
> ...
>
> I must be missing a simple thing that IE requires. Anyone have any ideas?
> Thanks.
>
> Mark Lenz
> Pierce Manufacturing, Inc.
> (920) 832-3523
> mlenz@piercemfg.com
>
> The information contained in this electronic mail message is confidential
> information and intended only for the use of the individual or entity 
> named
> above, and may be privileged. If the reader of this message is not the
> intended recipient, you are hereby notified that any dissemination,
> distribution or copying of this communication is strictly prohibited. If
> you have received this transmission in error, please contact the sender
> immediately, delete this material from your computer and destroy all
> related paper media. Please note that the documents transmitted are not
> intended to be binding until a hard copy has been manually signed by all
> parties.
> Thank you.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>
>
>
> ---------------------------------
> Do you Yahoo!?
> The New Yahoo! Search - Faster. Easier. Bingo.



-- 
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Stream PDF using servlet

Posted by ha...@informatiefabriek.nl.
I have the same problem....

I use this code:

....
InputStream is =
        new BufferedInputStream(
                new FileInputStream(valueObj.getPath()));
 
File f = new File(valueObj.getPath());
 
 
OutputStream os = response.getOutputStream();
 
//      Report the type and size of content being sent back.
response.setContentType("application/pdf");
response.setContentLength((int) f.length());
 
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Content-disposition",
                          "attachment; filename=" +
                                  f.getName());
byte[] buffer = new byte[1024]; /*or whatever size*/
int read = is.read(buffer);
while (read >= 0) {
        if (read > 0)
                os.write(buffer, 0, read);
        read = is.read(buffer);
}

/* NOT NEEDED  os.flush(); */
is.close();
os.close();
....

There is a major difference between browsers and the OS the user uses.
But I found that this code works with IE and Mozilla on windows.
I also works on MacOS X using IE 5.0 to 5.2....

You might give it a try!

Just for my personal interest... How does an http-server like apache 
handle these request.
Because when I use WGet to see the headers (on linux) it outputs the 
following:

[root@aphrodite root]# wget -S 
http://www.itcourseware.com/Webpdfs/webjsrv.pdf
--17:01:56--  http://www.itcourseware.com/Webpdfs/webjsrv.pdf
           => `webjsrv.pdf.1'
Resolving www.itcourseware.com... done.
Connecting to www.itcourseware.com[65.105.210.220]:80... connected.
HTTP request sent, awaiting response...
 1 HTTP/1.1 200 OK
 2 Date: Thu, 24 Apr 2003 15:02:03 GMT
 3 Server: Apache/1.3.23 (Unix)  (Red-Hat/Linux) mod_python/2.7.6 
Python/1.5.2 PHP/4.1.2 mod_perl/1.24_01 FrontPage/5.0.2.2510
 4 Last-Modified: Wed, 04 Sep 2002 21:17:26 GMT
 5 ETag: "f5a1f-c966a-3d767866"
 6 Accept-Ranges: bytes
 7 Content-Length: 824938
 8 Connection: close
 9 Content-Type: application/pdf

So what is so hard about doing it in Java?

Thanks,

Harm de Laat
Informatiefabriek




Lior Shliechkorn <li...@yahoo.com> 
04/24/2003 04:46 PM
Please respond to
"Tomcat Users List" <to...@jakarta.apache.org>


To
Tomcat Users List <to...@jakarta.apache.org>
cc

Subject
Re: Stream PDF using servlet






Lucky for you I just fixed this problem recently. Take out the 
setHeader(..) that have to do with the no-cache and try again.

Mark Lenz <ML...@piercemfg.com> wrote:
I'm trying to stream a PDF to a browser using a servlet. It works fine
using Mozilla. But, sure enough, I just can't get it to work with IE
(great standards compliance!). When I try to download the PDF through IE
(6.0), it asks me what I want to do (open or save the file). If I choose
open I get an error "Internet Explorer was not able to open this Internet
site. The request site is either unavailable or cannot be found. Please
try again later.". Here's the code from my servlet for streaming the PDF:

...
File pdf_file = new File("
");
if (!pdf_file.exists())
{
//display error message
...
return;
}
else
{
int filesize = (int)pdf_file.length();
res.setContentType("application/pdf");
res.setContentLength(filesize);
res.setHeader("Pragma", "no-cache");
res.setHeader("Cache-Control", "no-cache");
ServletOutputStream out = res.getOutputStream();

byte[] data = new byte[filesize];
DataInputStream in = new DataInputStream(new
FileInputStream(pdf_file));
in.readFully(data);
in.close();
out.write(data);
out.flush();
out.close();
}
...

I must be missing a simple thing that IE requires. Anyone have any ideas?
Thanks.

Mark Lenz
Pierce Manufacturing, Inc.
(920) 832-3523
mlenz@piercemfg.com

The information contained in this electronic mail message is confidential
information and intended only for the use of the individual or entity 
named
above, and may be privileged. If the reader of this message is not the
intended recipient, you are hereby notified that any dissemination,
distribution or copying of this communication is strictly prohibited. If
you have received this transmission in error, please contact the sender
immediately, delete this material from your computer and destroy all
related paper media. Please note that the documents transmitted are not
intended to be binding until a hard copy has been manually signed by all
parties.
Thank you.



---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org



---------------------------------
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Stream PDF using servlet

Posted by Lior Shliechkorn <li...@yahoo.com>.
Lucky for you I just fixed this problem recently. Take out the setHeader(..) that have to do with the no-cache and try again.

Mark Lenz <ML...@piercemfg.com> wrote:
I'm trying to stream a PDF to a browser using a servlet. It works fine
using Mozilla. But, sure enough, I just can't get it to work with IE
(great standards compliance!). When I try to download the PDF through IE
(6.0), it asks me what I want to do (open or save the file). If I choose
open I get an error "Internet Explorer was not able to open this Internet
site. The request site is either unavailable or cannot be found. Please
try again later.". Here's the code from my servlet for streaming the PDF:

...
File pdf_file = new File("
");
if (!pdf_file.exists())
{
//display error message
...
return;
}
else
{
int filesize = (int)pdf_file.length();
res.setContentType("application/pdf");
res.setContentLength(filesize);
res.setHeader("Pragma", "no-cache");
res.setHeader("Cache-Control", "no-cache");
ServletOutputStream out = res.getOutputStream();

byte[] data = new byte[filesize];
DataInputStream in = new DataInputStream(new
FileInputStream(pdf_file));
in.readFully(data);
in.close();
out.write(data);
out.flush();
out.close();
}
...

I must be missing a simple thing that IE requires. Anyone have any ideas?
Thanks.

Mark Lenz
Pierce Manufacturing, Inc.
(920) 832-3523
mlenz@piercemfg.com

The information contained in this electronic mail message is confidential
information and intended only for the use of the individual or entity named
above, and may be privileged. If the reader of this message is not the
intended recipient, you are hereby notified that any dissemination,
distribution or copying of this communication is strictly prohibited. If
you have received this transmission in error, please contact the sender
immediately, delete this material from your computer and destroy all
related paper media. Please note that the documents transmitted are not
intended to be binding until a hard copy has been manually signed by all
parties.
Thank you.



---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org



---------------------------------
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.