在JSP页面生成PDF文件
博客专区 > 文文1 的博客 > 博客详情
在JSP页面生成PDF文件
文文1 发表于2年前
在JSP页面生成PDF文件
  • 发表于 2年前
  • 阅读 138
  • 收藏 0
  • 点赞 2
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: mysql数据库存储PDF文件的字段MEDIUMBLOB,该字段类型为二进制数据,可以直接存储图片和文件,现在做的是java的Action中取出该二进制数据,然后在JSP页面输出PDF文件

(1).框架为SSH:

xml配置:(blank.jsp页面是啥都没有,完全一个空白页面)

  <!-- 发文管理详细信息,显示PDF发文 -->
	    <action name="showPdf" method="showPdf" class="standard-fileDataAction">
			<result  name="success" >
			/blank.jsp
			</result>	
		</action>

JAVA后台:

public String showPdf() throws IOException{
		FileData fileData = fileDataService.getById(id);
		byte[] bit = fileData.getData();
		if(bit != null){
			HttpServletResponse response = ServletActionContext.getResponse();
			response.setContentLength(bit.length);   
			response.setContentType("application/pdf;charset=UTF-8");
			OutputStream test = response.getOutputStream(); 
			DataOutput output = new DataOutputStream(test);    

			for( int i = 0; i < bit.length; i++ ) { 
				output.writeByte(bit[i] ); 
			} 
			test.flush(); 
			test.close(); 
			test=null; 
			response.flushBuffer(); 
		}
		return ActionSupport.SUCCESS;
	}

JSP页面请求:

./iface/showPdf?id="+fileDataObject.getId()

(2)这个测试可行,在网上也搜索了其他的一些用法,不过没有测试过:

把PDF文档通过JSP页面展示给用户。主要使用Object标签来实现的。

<html>
<head>
<title>Insert title here</title>
</head>
<body>
 <%   
   String docPath = request.getParameter("docPath ") == null ? "": request.getParameter("docPath ");  
 %>
    <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">  
          <!-- 下面是指明你的PDF文档所在地,相对于发布web目录 -->  
          <param name="SRC" value="<%=docPath%>">  
   </object>  
  
</body>
</html>

(3)利用java读取某个路径下的pdf文件,并在JSP页面打开:

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();

 

解释下MYSQL中BLOB类型的字段:用于存储二进制数据(利用inputStream来读取文件实际上也是获取文件的二进制数据,和在数据库中获取blob字段值是一样的)

MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。

MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G

解释下字节流:

字节流是由字节组成的,字符流是由字符组成的. Java里字符由两个字节组成.字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。在从字节流转化为字符流时,实际上就是byte[]转化为String时,public String(byte bytes[], String charsetName)有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统默认的lang

共有 人打赏支持
粉丝 13
博文 254
码字总数 97342
×
文文1
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: