仓酷云

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

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

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

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

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

x
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢?js|pdf|详解  前久做了一个经由过程JSP天生PDF报表的小项目,算得上开了一次眼界。企业的一些信息经由过程收集构成Html报表,固然IE能够间接打印显现在个中的内容,可是从界面下去看,假如间接将Html的显现了局打印出来,显得不太美妙。假如将它转成PDF文件再打印,则打印效果会好良多。

1、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文档显得十分主要。读者鄙人载类库的同时,也能够下载类库的文档。

2、怎样使用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中的地位是不是公道如许的历程之外,仿佛还没有别的更好的办法。

3、怎样经由过程JSP天生PDF报表

这一部分是在iText的教程中所没有的,网上的相干材料也对照少。我经由一段工夫研讨发明:先在服务器上天生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(new
Paragraph("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();
}

4、停止

我在项目中接纳的是第二种办法。本文的源码在我的tomcat4下面都是调试经由过程的。但愿能够给人人带来便利。
你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。
莫相离 该用户已被删除
沙发
发表于 2015-1-20 16:33:48 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
因胸联盟 该用户已被删除
板凳
发表于 2015-1-24 11:24:43 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
不帅 该用户已被删除
地板
发表于 2015-1-24 15:29:33 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
简单生活 该用户已被删除
5#
发表于 2015-2-1 19:48:50 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
爱飞 该用户已被删除
6#
发表于 2015-2-3 13:21:11 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
变相怪杰 该用户已被删除
7#
发表于 2015-2-5 15:27:24 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
第二个灵魂 该用户已被删除
8#
发表于 2015-3-3 03:09:28 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-11 09:01:22 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-18 01:31:32 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
若相依 该用户已被删除
11#
发表于 2015-3-25 08:41:35 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-24 01:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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