第二节:在Web应用程序中使用iText
本节介绍如何在Web应用中使用iText。
本节向导
l MyJavaServer.com
l Hello World
l Workaround for timeout problem
l Silent printing
l Hello World JSP
示例文件
u 使用servlet生成一个简单的”Hello World”文件(PDF, HTML or RTF)
l 需要的jar包
n servlet.jar(一般安装了tomcat后就有这个包)
l Servlets/JSP:
2. OutSimplePdf
u 使用servler生成一个pdf文件,文件输出到extension .pdf
l 需要的jar包
n servlet.jar(一般安装了tomcat后就有这个包)
l Servlets/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
u 演示在接收比较大的PdF文件的时候浏览器超时的问题。
l 需要的jav包
n Servlet.jar
l Servlets/JSP:
u 显示一下如何通过servler/browser实现silently(安静的,也就是说不提示)打印。
l 需要的jar包
n Servlet.jar
l Servlets/JSP:
n try it!
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