通过jsp页面怎么打开服务器上pdf文件

通过jsp页面怎么打开服务器上pdf文件,第1张

在不需要使用插件,直接打开通过链接方式打开

<%@ page language="java" import="java.util.*,java.io.*"

pageEncoding="UTF-8"%>

<%

String path = request.getContextPath()

String basePath = request.getScheme() + "://"

    + request.getServerName() + ":" + request.getServerPort()

    + path + "/"

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

   <base href="<%=basePath%>">

</head>

<%

   out.clear()

   out = pageContext.pushBody()

   response.setContentType("application/pdf")

   try {

    String strPdfPath = new String("D://200701010001.PDF")

    //判断该路径下的文件是否存在

    File file = new File(strPdfPath)

    if (file.exists()) {

     DataOutputStream temps = new DataOutputStream(response

       .getOutputStream())

     DataInputStream in = new DataInputStream(

       new FileInputStream(strPdfPath))

     byte[] b = new byte[2048]

     while ((in.read(b)) != -1) {

      temps.write(b)

      temps.flush()

     }

     in.close()

     temps.close()

    } else {

     out.print(strPdfPath + " 文件不存在!")

    }

   } catch (Exception e) {

    out.println(e.getMessage())

   }

%>

<body>

   <br>

</body>

</html>

如果访问者的计算机上没有装acrobat reader,直接用iframe或者直接用链接打开,那就不是打开文档,而是直接下载了,为了防止下载,想像到媒体文件的播放方式,加上一些官方的docs,考虑用用object标签使用pdf插件嵌入ie中

<HTML>

    <HEAD>

        <META http-equiv="Content-Type" content="text/html charset=gb2312">

        <META http-equiv="Content-Style-Type" content="text/css">

        <META http-equiv="Content-Script-Type" content="text/javascript">

        <TITLE>Checking if Acrobat Reader installed (IE4+)...</TITLE>

        <SCRIPT for="window" event="onload"

<!--

            document.all [

                         document.all.PDFNotKnown ? "IfNoAcrobat" : "IfAcrobat"

                         ] .style.display = "block"

        //--></SCRIPT>

    </HEAD>

    <BODY>

        <NOSCRIPT>

            Cannot determine if you have Acrobat Reader (or the full Acrobat)

            installed <FONT size="-1">(because JavaScript is unavailable or 

            turned off)</FONT>.

        </NOSCRIPT>

        <DIV id="IfNoAcrobat" style="display:none">

            <a href="http://get.adobe.com/cn/reader/">你需要先安装Adobe Reader才能正常浏览文件,请点击这里下载Adobe Reader.</a>   

      </DIV>

        <OBJECT type="application/pdf" width=0 height=0 style="display:none">

            <DIV id="PDFNotKnown" style="display:none">&nbsp</DIV>

        </OBJECT>

   <DIV id=showdiv

style="Z-INDEX: 0 LEFT:10px WIDTH: 990px POSITION: absolute TOP: -8px HEIGHT: 10px">

<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="990" height="700" border="0" top="-10" name="pdf"> 

<param name="toolbar" value="false">

<param name="_Version" value="65539">

<param name="_ExtentX" value="20108">

<param name="_ExtentY" value="10866">

<param name="_StockProps" value="0">

<param name="SRC" value="MXL.pdf">

</object>

</DIV>

</BODY>

</HTML>

在网页中直接显示pdf格式的文件方便阅读。但是如果文件较大加载速度会很慢,另外如果客户端没有安装pdf阅读插件的话,也就看不了了,不过还是贴出来了,各取所需吗。(1.pdf要改成自己的pdf文件路径插入到页面文件中)

Html代码

<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">   

<param name="_Version" value="65539">   

<param name="_ExtentX" value="20108">   

<param name="_ExtentY" value="10866">   

<param name="_StockProps" value="0">   

<param name="SRC" value="1.pdf">   

</object>   

<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">

<param name="_Version" value="65539">

<param name="_ExtentX" value="20108">

<param name="_ExtentY" value="10866">

<param name="_StockProps" value="0">

<param name="SRC" value="1.pdf">

</object>

标准浏览器中:

Java代码

<object data="1.pdf" type="application/pdf" width="300" height="200">    

alt : <a href="1.pdf">test.pdf</a>    

</object>   

<object data="1.pdf" type="application/pdf" width="300" height="200"> 

 alt : <a href="1.pdf">test.pdf</a>

</object>

IE7.0以上版本的浏览器中可用如下方法,低版本的IE会显示两个Object区域

Java代码

<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">    

<param name="_Version" value="65539">    

<param name="_ExtentX" value="20108">    

<param name="_ExtentY" value="10866">    

<param name="_StockProps" value="0">    

<param name="SRC" value="1.pdf">    

<object data="1.pdf" type="application/pdf" width="300" height="200">    

alt : <a href="1.pdf">test.pdf</a>    

</object>    

</object>   

<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">

<param name="_Version" value="65539">

<param name="_ExtentX" value="20108">

<param name="_ExtentY" value="10866">

<param name="_StockProps" value="0">

<param name="SRC" value="1.pdf">

<object data="1.pdf" type="application/pdf" width="300" height="200"> 

 alt : <a href="1.pdf">test.pdf</a>

</object>

</object>

低版本浏览器中的处理方法1:

Java代码

<!--[if IE]>    

<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">    

<param name="_Version" value="65539">    

<param name="_ExtentX" value="20108">    

<param name="_ExtentY" value="10866">    

<param name="_StockProps" value="0">    

<param name="SRC" value="1.pdf">    

</object>    

<![endif]-->    

<!--[if !IE]> <!-->    

<object data="1.pdf" type="application/pdf" width="800" height="1050">       

alt : <a href='http://get.adobe.com/cn/reader'>Adobe Reader.pdf</a>    

</object>    

<!--<![endif]-->   

<!--[if IE]>

 <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">

<param name="_Version" value="65539">

<param name="_ExtentX" value="20108">

<param name="_ExtentY" value="10866">

<param name="_StockProps" value="0">

<param name="SRC" value="1.pdf">

 </object>

<![endif]-->

 <!--[if !IE]> <!-->

 <object data="1.pdf" type="application/pdf" width="800" height="1050">   

alt : <a href='http://get.adobe.com/cn/reader'>Adobe Reader.pdf</a>

</object>

 <!--<![endif]-->

   低版本浏览器中的处理方法2:通过CSS控制显示隐藏

Html代码

/* hides the second object from all versions of IE */    

   

   

* html object.hiddenObjectForIE { display: none }    

/* display the second object only for IE5 Mac */    

/* IE Mac /*//*/    

* html object.hiddenObjectForIE { display: inline }    

/**/   

/* hides the second object from all versions of IE */

* html object.hiddenObjectForIE { display: none }

/* display the second object only for IE5 Mac */

/* IE Mac /*//*/

* html object.hiddenObjectForIE { display: inline }

/**/

Html代码

<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">   

<param name="_Version" value="65539">   

<param name="_ExtentX" value="20108">   

<param name="_ExtentY" value="10866">   

<param name="_StockProps" value="0">   

<param name="SRC" value="1.pdf">   

<object data="1.pdf" type="application/pdf" width="300" height="200" class="hiddenObjectForIE">    

alt : <a href="1.pdf">test.pdf</a>   

</object>   

</object>

以上文章转自   http://www.cnblogs.com/mengzw/p/4754757.html

jsp中要利用java来实现打开,可以通过浏览器打开:

以下程序实现了读取某个路径下的pdf文件,并用浏览器打开:

package test

import java.io.File

import java.io.FileInputStream

import java.io.IOException

import java.io.OutputStream

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

public class PDFServlet extends HttpServlet {

private static final long serialVersionUID = -3065671125866266804L

public PDFServlet() {

super()

}

public void destroy() {

super.destroy()

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("application/pdf")

FileInputStream in = new FileInputStream(new File("d:/1.pdf"))

OutputStream out = response.getOutputStream()

byte[] b = new byte[512]

while ((in.read(b)) != -1) {

out.write(b)

}

out.flush()

in.close()

out.close()

}

public void init() throws ServletException {

}

}

先在服务器上生成PDF文件,然后用户通过点击指向PDF文件的超链接选择下载或打开。这是一个思路,或者说是思路之一。本文实现了这个思路,又给出另外一个思路并通过两种途径实现之。

1)直接在服务器上生成PDF文件。

<%@ page import ="com.lowagie.text.*

,com.lowagie.text.pdf.*, java.io.*"%>

<%

String filename =

"PDF"+(new Random()).nextInt()+".pdf"

Document document =

new Document(PageSize.A4)

ServletOutputStream out1

= response.getOutputStream()

try{

PdfWriter writer =

PdfWriter.getInstance(document,

new FileOutputStream(filename) )

document.open()

document.add(new Paragraph("Hello World"))

document.close()

}

catch(Exception e){}

%>

上面的程序在服务器上生成了一个静态的PDF文件。显然,每次运行所得的PDF文件的名称应该是独一无二不能有重的。本程序通过随机函数来命名生成的PDF文件。本程序的缺点就是,每次运行都会在服务器上产生一个PDF文件,如果不及时删除,数量会越来越大,这显然是站点维护者所不愿意看到的。

2)将PDF文件通过流的形式输送到客户端的缓存。这样做的好处是不会在服务器上留下任何“遗迹”。

i)直接通过JSP页面生成

<%@

page import="java.io.*,

java.awt.Color,com.lowagie.text.*,

com.lowagie.text.pdf.*"%>

<%

response.setContentType

( "application/pdf" )

Document document = new Document()

ByteArrayOutputStream buffer

= new ByteArrayOutputStream()

PdfWriter writer=

PdfWriter.getInstance( document, buffer )

document.open()

document.add(new Paragraph("Hello World"))

document.close()

DataOutput output =

new DataOutputStream

( response.getOutputStream() )

byte[] bytes = buffer.toByteArray()

response.setContentLength(bytes.length)

for( int i = 0

i <bytes.length

i++ )

{

output.writeByte( bytes[i] )

}

%>

ii)通过Servlet生成

import java.io.*

import javax.servlet.*

import javax.servlet.http.*

import com.lowagie.text.*

import com.lowagie.text.pdf.*

public void doGet

(HttpServletRequest request,

HttpServletResponse response)

throws IOException,ServletException

{

Document document =

new Document(PageSize.A4, 36,36,36,36)

ByteArrayOutputStream ba

= new ByteArrayOutputStream()

try

{

PdfWriter writer =

PdfWriter.getInstance(document, ba)

document.open()

document.add(new

Paragraph("Hello World"))

}

catch(DocumentException de)

{

de.printStackTrace()

System.err.println

("A Document error:" +de.getMessage())

}

document.close()

response.setContentType

("application/pdf")

response.setContentLength(ba.size())

ServletOutputStream out

= response.getOutputStream()

ba.writeTo(out)

out.flush()

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/8060140.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存