|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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,那他就是整型而不是对象,转换类型是还得借助包装类。 |
|