`
wangjian5748
  • 浏览: 209509 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Servlet输出PDF文档方法

阅读更多

概述 Java Servlet 编程可以很方便地将 HTML 文件发送到客户端的 Web 浏览器。然而许多站点还允许访问非 HTML 格式的文档,包括 Adobe PDFMicrosoft Word Micorsoft Excel 等。事实上这些非 HTML 格式只要能用 MIME 类型表示,就可以利用 servlet 来发送。本文将以 PDF为例,向你介绍如何使用 servlet 传送非 HTML 格式文件及该文件是如何在服务器端用Java生成的。

你只要将文件写到servlet 的输出流中,就可以利用 servlet 在浏览器中打开一个文件。首先从获得 servlet 的输出流开始:

ServletOutputStream out = res.getOutputStream();

互联网上使用 MIME (multipurpos Internet mail extension 多目的互联网邮件扩展协议)来传送混合格式、多媒体和二进制数据文件。如果要在 servlet response 对象中打开某个文档,就必须设置该文档的 MIME 类型。

Web客户端发送PDF文档
(
)MIME类型
Web
浏览器使用 MIME 类型来识别非 HTML 文档,并决定如何显示该文档内的数据。将插件 (plug-in) MIME 类型结合使用,则当 Web 浏览器下载 MIME 类型指示的文档时,就能够启动相应插件处理此文档。某些 MIME 类型还可以与外部程序结合使用,浏览器下载文档后会启动相应的外部程序。

MIME
类型非常有用。它们允许 Web 浏览器处理不同格式的文档,却不需要事先嵌入相关知识。Java Servlets 可以使用 MIME 类型来向浏览器传送非 HTML 文件,比如 Adobe PDF Micorsoft Word。使用正确的 MIME 类型能够保证这些非 HTML 文件被正确的插件或外部程序显示。

PDF
文件的 MIME 类型是 "application/pdf"。要用servlet 来打开一个 PDF 文档,需要将 response 对象中 header content 类型设置成 "application/pdf":

// PDF
文件的 MIME 类型
res.setContentType( "application/pdf" );
//也可以通过下面的方式来设置

response.setHeader("Content-type", "application/pdf");
(
)Content disposition
HTTP response header
中的content-disposition 允许 servlet 指定文档表示的信息。使用这种header ,你就可以将文档指定成单独打开(而不是在浏览器中打开),还可以根据用户的操作来显示。如果用户要保存文档,你还可以为该文档建议一个文件名。这个建议名称会出现在 Save As 对话框的文件名栏中。如果没有指定,则对话框中就会出现 servlet 的名字。在 servlet 中,你需要将 header 设置成下面这样:

res.setHeader("Content-disposition",
"attachment; filename=" +
"Example.pdf" );
// attachment -
因为不希望在浏览器中直接打开它,而是利用Adobe Acrobat
//
可以通过设置default file name来确定保存文当时的建议名称。
//response.setHeader("Content-Disposition", "inline; filename=report.pdf");
(三)封装非 HTML 文档
完成上述工作后,剩下的就非常简单了。你需要根据待传送文件的名字,创建一个 java.net.URL 对象。交给 URL 构造器的字符串必须是指向该文件的一个有效 URL 地址。在这里,我要打开本地的PDF文档:

String fileURL = "http://localhost/aboutadobe/careeropp/pdfs/tables.pdf;

URL
字符串也可以类似于 http://www.gr.com/pub/somefile.doc http://www.gr.com/pub/somefile.xls。但必须确保待传送文件类型与先前在 HTTP response 对象中设置的 MIME 类型一致。

(四)其他
开始阅读传送的文档之前,首先要从 URL 对象中获得输入流 InputStream,用 BufferedInputStream InputStream 封装起来。

BufferedInputStreambis = newBufferedInputStream(url.openStream());

一旦你完成上述操作,就只要简单地将 InputStream 中的字节,写入到 servlet 的输出流 OutputStream 中:

BufferedOutputStreambos = new BufferedOutputStream(out);

byte[] buff = new byte[2048];
intbytesRead;

//
一个简单的读写循环
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}


在最后的代码块中,关闭这些流 ,如:bos.close();

PDF
文档在服务器端的生成
利用iText040工具包可以很方便的输出一个十分漂亮的PDF文档。

1.Document
的创建
Document document=new Document(p0, p1, p2, p3, p4)

其中,p0为页面的大小,如 PageSize.A4; p1?p4分别描述上下左右页边空白。

2.
构造复写器
PdfWriter.getInstance(document, new FileOutputStream("tables.pdf"))

执行程序后,将在当前目录下生成一个名为tables.pdf的文件。

接着打开Documentdocument.open()

3.
根据需要定义一个Table
//
一个拥有十列的Table
Table datatable = new Table(10);
//
定义CellCell之间的距离为零
datatable.setCellpadding(0);
//
定义Cell的间隔
datatable.setCellspacing(3);
//
使Table

分享到:
评论

相关推荐

    Servlet技术.pdf

    3. **配置Servlet**:在Web应用的配置文件`web.xml`中注册Servlet,包括定义Servlet的名称、类名以及URL映射。例如: ```xml <servlet> <servlet-name>Hello</servlet-name> <servlet-class>j5_01</servlet-...

    servlet练习项目pdf与代码

    PDF文档可能包含了以下内容: 1. **Servlet简介**:解释了Servlet的基本概念,它是如何作为Java平台上的Web应用接口来扩展服务器功能的。 2. **Servlet生命周期**:详述了Servlet的初始化、服务、销毁三个阶段,...

    ITEXT输出pdf

    其中,第二个参数可以是任何一种流,你可以写入文件中或者直接输出到 servlet 等等。 打开 Document 创建了 Writer 实例后,需要打开 Document 对象,以便开始生成 PDF 文件: ```java document.open(); ``` 请...

    Tomcat开发jsp与servlet总结.pdf

    从提供的文件内容中,我们可以提取出关于Tomcat开发JSP与Servlet的关键知识点。下面将对这些知识点进行详细说明: 1. Tomcat服务器简介: - Apache Tomcat是一个开源的Servlet容器,它实现了Java Servlet和Java...

    servlet pdf

    // 输出流必须关闭,否则生成的PDF文件可能损坏 response.getOutputStream().close(); } } ``` #### 七、结论 Servlet作为一种强大的Web开发技术,在处理复杂的业务逻辑、生成动态内容等方面具有显著优势。结合...

    Servlet3.1规范(英文).pdf

    通过使用 `AsyncContext` 的 `readBody()` 和 `writeTo()` 方法,可以在不阻塞主线程的情况下处理输入和输出流,从而提高服务器的并发处理能力。 #### 三、版权与许可 Servlet 3.1 规范由 Oracle Corporation 发布...

    《JSP+Servlet+Tomcat应用开发从零开始学》PDF

    《JSP+Servlet+Tomcat应用开发从零开始学》这本书是针对初学者设计的一本教程,旨在帮助读者从零基础开始...书中的PDF版本方便你随时随地进行学习,而压缩包中的"还是空.txt"和"空.txt"可能是无关的文件,可以忽略。

    Servlet开发.pdf

    这个Servlet输出的内容是一个简单的HTML页面,显示“Hello, World!”和当前时间。 2. Servlet的部署配置: 为了让Servlet能够被Web服务器识别并正确地处理请求,需要在Web应用程序的部署描述符文件`web.xml`中进行...

    Servlet与JSP核心编程(第2版第1卷).pdf

    Servlet和JSP是Java Web开发中的核心技术,..."Servlet与JSP核心编程(第2版第1卷).pdf"这本书很可能是对这些概念的深入讲解,涵盖了从基础到进阶的各种主题,对于想要提升Java Web技能的开发者来说是一份宝贵的资源。

    JasperReport浏览器输出PDF为空白页的解决方案

    标题中的“JasperReport浏览器输出PDF为空白页”通常意味着在使用JasperReport生成PDF报表时,浏览器未能正确显示内容。这可能是由多种原因引起的,包括但不限于以下几点: 1. **XML解析错误**:`test.jrxml`文件是...

    java servlet实现文件下载

    使用`java.io`包中的类,如`FileInputStream`和`ServletOutputStream`,从服务器的文件系统读取文件内容,并将其写入到响应输出流中。这将把文件内容实际发送到客户端。 5. **配置Web应用** 将项目解压后,将其...

    java实现导出pdf文件

    最后,为了使用户能够下载PDF文件,你需要在JSP页面上创建一个链接或按钮,触发上述Servlet。例如,可以创建一个`<a>`标签,链接到Servlet,并附带HTML内容作为请求参数: ```jsp ${pageContext.request.context...

    servlet+cookie和Session

    1. **初始化**:服务器启动或首次接收到请求时,Servlet容器根据`web.xml`配置文件创建Servlet实例,并调用`init()`方法。`init()`方法只执行一次,可以用于进行一些初始化操作。 2. **服务**:每次客户端请求时,...

    servlet导出文件

    3. **流化输出**:通过调用`ServletResponse`对象的`getOutputStream()`方法,我们可以获取一个`ServletOutputStream`,用于将文件内容写入HTTP响应。使用`write()`方法逐字节地写入文件内容。 4. **关闭资源**:...

    javaServlet常规应用.pdf

    在给定的文件中,我们看到了三个基本的Java Servlet实例,它们分别展示了如何以纯文本、HTML以及处理请求参数的方式输出内容。 例 8.1 - 纯文本输出: 在`HelloServlet.java`中,我们看到一个简单的Servlet,它只...

    java实现pdf上传,下载,在线预览,删除,修改等功能

    通过File类提供的delete()方法,可以直接删除文件系统中的PDF文件。在执行删除操作前,务必检查权限,并确保没有其他进程正在使用该文件。 5. **PDF修改**: PDF文件的修改较为复杂,因为PDF格式是静态且二进制的...

    Java_Servlet入门教程.pdf

    - **写文件**:通过文件输出流(如`FileOutputStream`)来写入文件。 ```java FileOutputStream fos = new FileOutputStream(new File(path)); fos.write(data.getBytes()); fos.close(); ``` #### 六、用...

    Servlet简介和环境设置.pdf

    在 JSP 文件中,可以使用表单将用户输入发送到 Servlet,并使用 HttpServletResponse 对象设置响应内容类型和输出响应信息。 使用 @WebServlet 注解可以简化 Servlet 的配置,减少 web.xml 文件中的配置项。Servlet...

Global site tag (gtag.js) - Google Analytics