|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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,代码照样能够编译运行的。 |
|