转自:https://www.jb51.net/article/73528.htm

本文实例讲述了JSP生成WORD文档,EXCEL文档及PDF文档的方法。分享给大家供大家参考,具体如下:

在web-oa系统中,公文管理好象不可或缺,有时需要从数据库中查询一些数据以某种格式输出来,并以word文档的形式展现,有时许多word文档保存到数据库中的某个表的Blob字段里,服务器再把保存在Blob字段中的图片文件展现给用户。通过网上查找发现很少有关于此类的文章,现在整理起来供大家参考。

1 在client端直接生成word文档

在jsp页面上生成word文档非常简单,只需把contentType=”text/html”改为contentType="application/msword; charset=gb2312"即可,代码如下:

复制代码代码如下:
<%@ page contentType="application/msword; charset=gb2312" %>

通过设置可以使原来页面的内容在word中表现出来。

如果需要把word文档下载下来,只需在jsp页面上面加上如下代码:

1
2
3
<%
response.setHeader("Content-Disposition", "attachment;filename=filename.doc");
%>

其中filename.doc中filename是要下载的word文档的文件名,可以通过<%=docName%>来自行定制,如下

1
2
3
<%
response.setHeader("Content-Disposition", "attachment;filename=<%=docName%>.doc");
%>

这样提供一个提示信息供用户选择。

小技巧:如果程序员需要在生成word文档的时候按照自己预先在word上设计好的格式,可以复制word格式然后粘贴到frontpage中,取html代码贴到jsp页面即可。

2 在客户端输出存在数据库中的word实体

这里只讨论在client输出oracle中BLOB字段中的word文档实体。其中调用了类getBlobBean,该类提供了从oracle中取出blob功能,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package yourpackage;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import oracle.sql.*;
import beans.yourbeanpackage. getBlobBean;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */
public class GetBlobServlet1 extends HttpServlet {
//设置输出内容类型,这个设置很重要,否则客户端浏览器不能识别输出内容,导致弹出下载的对话框。
 private static final String CONTENT_TYPE = "application/msword;charset=gb2312";
 //Initialize global variables
 public void init() throws ServletException {
 }
 //Process the HTTP Get request
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  response.setContentType(CONTENT_TYPE);
  perform(request,response);
 }
 public void perform(HttpServletRequest request, HttpServletResponse response){
try{
//该类功能是从oracle哭中取出blob实体
   getBlobBean getBlob=new getBlobBean();
   OutputStream sos = response.getOutputStream();
   getBlob.connFunction();
oracle.sql.BLOB blob=getBlob.getBlob("cehui");
//输出word文档
if(blob!=null){
    InputStream pi = blob.getBinaryStream();
    int blobsize =(int)blob.length();
    byte[] blobbytes = new byte[blobsize];
    int bytesRead = 0;
    while ((bytesRead = pi.read(blobbytes)) != -1) {
     sos.write(blobbytes, 0, bytesRead);
    }
    pi.close();
    sos.flush();
    sos.close();
   }
   getBlob.dropConnFunction();
  }catch(Exception e){
   System.out.println(e.toString());
  }
 }
 //Clean up resources
 public void destroy() {
 }
}

3 在client端直接生成EXCEL文档

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page contentType="application/vnd.ms-excel; charset=gb2312" %>
<%
response.setHeader("Content-Disposition", "attachment;filename=20050304.xls");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>生成</title>
</head>
<body>
生成例子excel 。 用WORD排版面,倒出HTML 把代码拷贝到网页里,然后这个JSP页面打印你就随心所欲的控制了。
</body>
</html>

4 在client端直接生成PDF文档

需要下载JAR包:以下代码在JDK1.4  RESIN2.16  下测试通过

ITEXT包 http://mesh.dl.sourceforge.net/sourceforge/itext/itext-1.3.5.jar
字体包http://itext.sourceforge.net/downloads/iTextAsian.jar

JSP生成到客户IE端直接打开

ie_PDF.jsp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@
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] ); }
%>

在服务器端生成不下载。

server_PDF.jsp:

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page import ="com.lowagie.text.*,com.lowagie.text.pdf.*, java.io.*"%>
<%
String filename = "D://test//111111.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){}
%>

使用iText可以设置文字的字体,对于我们中国的程序员来说如何显示中文是最紧要的问题。幸好iText中有一个专门的包用来设置亚洲国家的字体你可以从http://itext.sourceforge.net/downloads/iTextAsian.jar下载这个包。然后把它直接放到你的ClassPath中就可以了。如何设置字体呢?

1
2
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);

在上面的代码中设置了中文字体的显示,你只要使用下面的代码就可以包中文加到PDF中了

1
2
3
String title = "我爱喝咖啡";
Paragraph t = new Paragraph(title, FontChinese);
doc.add(t);

希望本文所述对大家JSP程序设计有所帮助。

JSP生成WORD文档,EXCEL文档及PDF文档的方法的更多相关文章

  1. JSP生成word文件

    1.jsp生成word文件,直接改动jsp格式: <%@ page contentType="application/vnd.ms-word;charset=GB2312"% ...

  2. PDF 补丁丁 0.6.1.3498 版重大更新:为文本PDF文档自动生成书签!

    新的 PDF 补丁丁开放了内部测试了很久的好用功能——自动书签. 这个功能可以在一分钟内快速生成文本型 PDF 文档的书签(说明:本功能分析文档中的文本,生成标题,故对扫描版的 PDF 文档无效). ...

  3. ABBYY PDF Transformer+从文件选项中创建PDF文档的教程

    可使用OCR文字识别软件ABBYY PDF Transformer+从Microsoft Word.Microsoft Excel.Microsoft PowerPoint.HTML.RTF.Micr ...

  4. ABBYY FineReader 15新增智能PDF文档转换功能

    ABBYY FineReader 15(Windows系统)新增智能PDF文档转换功能,可自动检测导入PDF数字文档的文本层质量,确保转变为可编辑格式后的准确结果:从表单字段和文本框中提取文本,准确保 ...

  5. ABBYY FineReader 15 中保存和导出PDF文档的小细节

    运用ABBYY FineReader OCR文字识别软件,用户能将各种格式的PDF文档保存为新的PDF文档.PDF/A格式文档,以及Microsoft Word.Excel.PPT等格式.在保存与导出 ...

  6. C# 复制PDF页面到另一个PDF文档

    C# 复制PDF页面到另一个PDF文档 有时候我们可能有这样一个需求,那就是把PDF页面从一个PDF文档复制到另一个PDF文档中.由于PDF文档并不像word文档那样好编辑,因此复制也相对没有那么容易 ...

  7. SharePoint 2013 文档库中PPT转换PDF

    通过使用 PowerPoint Automation Services,可以从 PowerPoint 二进制文件格式 (.ppt) 和 PowerPoint Open XML 文件格式 (.pptx) ...

  8. Apache PDFbox开发指南之PDF文档读取

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51542309 相关文章: <Apache PDFbox开发指南之PDF文本内容 ...

  9. Apache-Tika解析PDF文档

    通常在使用爬虫时,爬取到网上的文章都是各式各样的格式处理起来比较麻烦,这里我们使用Apache-Tika来处理PDF格式的文章,如下: package com.mengyao.tika.app; im ...

随机推荐

  1. 使用flex布局,垂直居中

    要完成下面的样式: 1:绿色部分宽度固定,红色部分自适应宽度: 2:整体高度自适应,红色和绿色部分的内容垂直居中: html代码: <div class="main"> ...

  2. IE7下对某些seajs压缩文件不兼容的解决方法

    seajs.config({ comboExcludes: /common.js/ }) (杨磊哥提供)

  3. MySQL--关联更新

    ## 关联更新 ## 注意set条件在WHERE条件之前关联ON条件之后 UPDATE db1.tb001 AS T1 INNER JOIN db2.tb002 AS T2 ON T1.id=T2.i ...

  4. 7zip命令行中文说明

    7z.exe 是 7-Zip 的命令行版本.7z.exe 使用 7-Zip 的其它模块,7za.exe 是7-Zip 的独立版本,7za.exe 仅支持 7z.zip.gzip.bzip2 和 tar ...

  5. Linux 安装Jdk、mysql、apache、php、tomcat、nginx

    Jdk 安装分三步:第一步,上传跟 linux 位数相同的 jdk tar 包,解压:第二步:解压 tar 包,配置环境变量,且 source 一下 /etc/profile:第三步:检查版本 第一步 ...

  6. CRM 2011 Plugin 知识的总结加代码解释

    1.??的使用,就是判断值是否为null,为null的话,给赋初值,否则就直接取值. decimal new_amount = 0; if (targetEntity.Contains("字 ...

  7. 一个高效的敏感词过滤方法(PHP)

    $badword = array( '张三','张三丰','张三丰田' ); $badword1 = array_combine($badword,array_fill(0,count($badwor ...

  8. 【Spring学习笔记-MVC-9】SpringMVC数据格式化之日期转换@DateTimeFormat

    作者:ssslinppp       1. 摘要 本文主要讲解Spring mvc数据格式化的具体步骤: 并讲解前台日期格式如何转换为java对象: 在之前的文章<[Spring学习笔记-MVC ...

  9. VS2005常用快捷键

    Visual C++ 2005有很多种快捷键的映射方案,有适合 Emacs 用户的,有适合 Visual C++ 6.0 用户的,也有 Visual Studio 2005的,下面的快捷键符合IDE默 ...

  10. 1011 World Cup Betting (20 分)

    1011 World Cup Betting (20 分) With the 2010 FIFA World Cup running, football fans the world over wer ...