仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1143|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA编程:使用iText在JSP中天生PDF报表

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:38:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解js成绩的由来
  前不久做了一个经由过程JSP天生PDF报表的小项目,算得上开了一次眼界。企业的一些信息经由过程收集构成Html报表,固然IE能够间接打印显现在个中的内容,可是从界面下去看,假如间接将Html的显现了局打印出来,显得不太美妙。假如将它转成PDF文件再打印,则打印效果会好良多。
  iText简介
  iText是一个开放源码的Java类库,能够用来便利地天生PDF文件。人人经由过程会见http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948下载最新版本的类库,下载完成以后会失掉一个.jar包,把这个包到场JDK的classpath便可利用。假如天生的PDF文件中必要呈现中文、日文、韩笔墨符,则还必要经由过程会见http://itext.sourceforge.net/downloads/iTextAsian.jar下载iTextAsian.jar包。
  关于iText类库的利用,http://www.lowagie.com/iText/tutorial/index.html有对照具体的教程。该教程从进门入手下手,对照体系地先容了在PDF文件中放进笔墨、图片、表格等的办法和技能。读完这片教程,大抵就能够做一些从复杂到庞大的PDF文件了。不外,试图经由过程教程办理在天生PDF文件过程当中碰到的一切坚苦无疑是一种期望。以是,浏览iText的api文档显得十分主要。读者鄙人载类库的同时,也能够下载类库的文档。
  怎样使用iText在java程序中天生PDF报表
  以下是上述教程中一个最复杂的例子,这个例子描写了经由过程iText天生PDF文件的一样平常程序框架。读者只必要在document.open();和document.close();两条语句两头到场本人但愿放在PDF文件中的内容便可。该例子只在PDF文件中加了“HelloWorld“一行笔墨。

Documentdocument=newDocument();
try
{
 PdfWriter.getInstance(document,newFileOutputStream("Chap0101.pdf"));
 document.open();
 document.add(newParagraph("HelloWorld"));
}
catch(DocumentExceptionde)
{
 System.err.println(de.getMessage());
}
catch(IOExceptionioe)
{
 System.err.println(ioe.getMessage());
}
document.close();
  由以上的例子可见,程序的框架非常分明了然。但是在PDF中指定笔墨、丹青、表格的地位是一件十分贫苦的事变。除不休地在程序中修正地位、然后运转程序、天生PDF文件、察看元素在PDF中的地位是不是公道如许的历程之外,仿佛还没有别的更好的办法。
  怎样经由过程JSP天生PDF报表
  这一部分是在iText的教程中所没有的,网上的相干材料也对照少。我曾在CSDN上看过有人开帖扣问完成细节,有人复兴了完成的道理:先在服务器上天生PDF文件,然后用户经由过程点击指向PDF文件的超链接选择下载或翻开。这是一个思绪,大概说是思绪之一。本文完成了这个思绪,又给出别的一个思绪并经由过程两种路子完成之。
  1)间接在服务器上天生PDF文件。
<%@pageimport="com.lowagie.text.*,com.lowagie.text.pdf.*,java.io.*"%>
<%
 Stringfilename="PDF"+(newRandom()).nextInt()+".pdf";
 Documentdocument=newDocument(PageSize.A4);
 ServletOutputStreamout1=response.getOutputStream();
 try
 {
  PdfWriterwriter=PdfWriter.getInstance(document,newFileOutputStream(filename));
  document.open();
  document.add(newParagraph("HelloWorld"));
  document.close();
 }
 catch(Exceptione){}%>
  下面的程序在服务器上天生了一个静态的PDF文件。明显,每次运转所得的PDF文件的称号应当是举世无双不克不及有重的。本程序经由过程随机函数来定名天生的PDF文件。本程序的弱点就是,每次运转城市在服务器上发生一个PDF文件,假如不实时删除,数目会愈来愈年夜,这明显是站点保护者所不肯意看到的。
  2)将PDF文件经由过程流的情势保送到客户真个缓存。如许做的优点是不会在服务器上留下任何“遗址”。
  i)间接经由过程JSP页面熟成
<%@
pageimport="java.io.*,java.awt.Color,com.lowagie.text.*,com.lowagie.text.pdf.*"%>
<%
 response.setContentType("application/pdf");
 Documentdocument=newDocument();
 ByteArrayOutputStreambuffer=newByteArrayOutputStream();
 PdfWriterwriter=PdfWriter.getInstance(document,buffer);
 document.open();
 document.add(newParagraph("HelloWorld"));
 document.close();
 DataOutputoutput=newDataOutputStream(response.getOutputStream());
 byte[]bytes=buffer.toByteArray();
 response.setContentLength(bytes.length);
 for(inti=0;i<bytes.length;i++)
 {
  output.writeByte(bytes[i]);
 }
%>
  ii)经由过程Servlet天生
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importcom.lowagie.text.*;
importcom.lowagie.text.pdf.*;
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
 throwsIOException,ServletException
 {
  Documentdocument=newDocument(PageSize.A4,36,36,36,36);
  ByteArrayOutputStreamba=newByteArrayOutputStream();
  try
  {
   PdfWriterwriter=PdfWriter.getInstance(document,ba);
   document.open();
   document.add(newParagraph("HelloWorld"));
  }
  catch(DocumentExceptionde)
  {
   de.printStackTrace();
   System.err.println("ADocumenterror:"+de.getMessage());
  }
  document.close();
  response.setContentType("application/pdf");
  response.setContentLength(ba.size());
  ServletOutputStreamout=response.getOutputStream();
  ba.writeTo(out);
  out.flush();
 }

  停止
  我在项目中接纳的是第二种办法。本文的源码在我的tomcat4下面都是调试经由过程的。但愿能够给人人带来便利。
  接待人人接纳,如需转载,请说明出处。



还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。
莫相离 该用户已被删除
沙发
发表于 2015-1-19 15:52:11 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
admin 该用户已被删除
板凳
发表于 2015-1-20 08:09:43 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
柔情似水 该用户已被删除
地板
发表于 2015-1-29 19:43:04 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-6 03:41:00 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
飘灵儿 该用户已被删除
6#
发表于 2015-2-15 10:16:26 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
第二个灵魂 该用户已被删除
7#
发表于 2015-3-1 10:50:03 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
兰色精灵 该用户已被删除
8#
发表于 2015-3-6 11:10:20 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
老尸 该用户已被删除
9#
发表于 2015-3-13 00:08:35 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
简单生活 该用户已被删除
10#
发表于 2015-3-20 06:36:48 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
分手快乐 该用户已被删除
11#
发表于 2015-4-1 13:19:43 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
小魔女 该用户已被删除
12#
 楼主| 发表于 2015-4-2 00:01:20 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
深爱那片海 该用户已被删除
13#
发表于 2015-4-8 20:02:20 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
爱飞 该用户已被删除
14#
发表于 2015-4-9 11:09:56 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
蒙在股里 该用户已被删除
15#
发表于 2015-4-10 07:03:14 | 只看该作者
是一种为 Internet发展的计算机语言
飘飘悠悠 该用户已被删除
16#
发表于 2015-4-23 11:19:45 | 只看该作者
是一种突破用户端机器环境和CPU
不帅 该用户已被删除
17#
发表于 2015-5-1 21:11:23 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
乐观 该用户已被删除
18#
发表于 2015-5-2 17:30:23 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
再现理想 该用户已被删除
19#
发表于 2015-5-9 23:33:39 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
若相依 该用户已被删除
20#
发表于 2015-6-7 02:06:13 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-5 21:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表