您的位置:首页 > 其它

iText中文教程 第二章 在Web应用程序中使用iText(上)

2006-09-07 12:26 806 查看

第二节:在Web应用程序中使用iText

本节介绍如何在Web应用中使用iText。

本节向导

l MyJavaServer.com
l Hello World
l Workaround for timeout problem
l Silent printing
l Hello World JSP

示例文件

1. HelloWorldServlet
u 使用servlet生成一个简单的”Hello World”文件(PDF, HTML or RTF)
l 需要的jar包
n servlet.jar(一般安装了tomcat后就有这个包)
l Servlets/JSP:
n presentationtype=pdf
n presentationtype=html
n presentationtype=rtf
2. OutSimplePdf
u 使用servler生成一个pdf文件,文件输出到extension .pdf
l 需要的jar包
n servlet.jar(一般安装了tomcat后就有这个包)
l Servlets/JSP:
n without message
n with message
3. UserAgent.jsp
u 查看User-Agent(表面意思是:用户代理。应该指的是用户上网的时候所用的浏览器,操作系统等参数)。如果用户使用MSIE,则插入PDf,否则转到Servlet
l Servlets/JSP:
n try this with different browsers
4. GetPost.jsp
u 演示一下使用GET和POST提交数据的方式生成PDF文件
l Servlets/JSP:
n GET
n POST
5. ProgressServlet
u 演示在接收比较大的PdF文件的时候浏览器超时的问题。
l 需要的jav包
n Servlet.jar
l Servlets/JSP:
n show progress
6. SilentPrintServlet
u 显示一下如何通过servler/browser实现silently(安静的,也就是说不提示)打印。
l 需要的jar包
n Servlet.jar
l Servlets/JSP:
n try it!
7. HelloWorld.jsp
u 使用Jsp生成一个PDF文档。

正文

MyJavaServer.com
本节所有的例子都在主机MyJavaServer.com上,MyJavaServer.com是一个免费的J2EE主机服务,他是一个java开发者网站javalobby的一部分。作为一个Java程序员,你可以免费获得一个javalobby会员,这可以使你获得很多的好处,例如:免费的图书,下载,包含最新java消息和文档的新闻周刊,并且可以访问网上最大的java文档网站:Jdocs.com,另外你也可以在JRoller.com上免费创建你自己的java blog。
HelloWorld:
在上一章的Hello World中,我们使用一个Java应用程序来创建一个PDF文档。现在我们仍然做相同的事情,不过这次我们不是在FileOutputStream上输出文档,而是在HttpServletResponse对象的OutputStream上输出内容。
PdfWriter.getInstance(document, response.getOutputStream());
在这个例子中,我们接收了一个名叫presentationtype的参数,这个参数的值可以是下面几个中的一个:
l Pdf
l Html
l Rtf
通过你传递过来的参数,你应该在你的浏览器上看到pdf、html或者rtf文档。
Java文件:com.lowagie.examples.general.webapp.HelloWorldServlet
结果:presentationtype=pdf presentationtype=html presentationtype=rtf
注意,我并没有说你将会在你的浏览器上看到pdf、html或者rtf文档,它应该在所有的浏览器上运行,但是我们知道,在有些浏览器上不行。例如,我们将ContentType设置成PDF:
response.setContentType("application/pdf");

但是有的浏览器会认为文件的扩展名比contenttype优先(不要问我为什么),这就是我们为什么要在web.xml文件里面把servlet配置成看起来像一个pdf文件的url样式。
<servlet-mapping>

<servlet-name>OutSimplePdf</servlet-name>

<url-pattern>/servlet/simple.pdf</url-pattern>

</servlet-mapping>

但是有的浏览器需要预先知道pdf文件的content-length(否则他们只会给你显示一个空白页),能够这样运行的唯一方法就是将一个完成的pdf文件缓冲到ByteArrayOutputStream中。但是这样做有个问题,如果你需要传送一个非常大的或者非常耗时的pdf文件,那么你将可能冒着服务器连接超时的危险。
Document document = new Document();

ByteArrayOutputStream baos = new ByteArrayOutputStream();

PdfWriter.getInstance(document, baos);

document.open();

document.add(new Paragraph(msg));

document.close();

response.setContentType("application/pdf");

response.setContentLength(baos.size());

ServletOutputStream out = response.getOutputStream();

baos.writeTo(out);

out.flush();

Nicolas Guichard(人名)建议我们在向ServletOutputStream中输出pdf文件之前设置一下Cache Header,这些headers决定了被客户端或者代理缓冲的规则。使用这些Cache Header或许会帮你解决一些问题。
response.setHeader("Expires", "0");

response.setHeader("Cache-Control",

"must-revalidate, post-check=0, pre-check=0");

response.setHeader("Pragma", "public");

所以,忘了那个HelloWorldServlet,然后用这个来代替
示例文件:com.lowagie.examples.general.webapp.OutSimplePdf
输出结果:without message with message
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: