JAVA编程:使用iText在JSP中天生PDF报表
学习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);
}
%>
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,那他就是整型而不是对象,转换类型是还得借助包装类。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 Java是一种计算机编程语言,拥有跨平台、面向对java Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 是一种为 Internet发展的计算机语言 是一种突破用户端机器环境和CPU Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
页:
[1]