jsp页面如何导成pdf格式?

2022-05-08 科技 137阅读
先在服务器上生成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;
ii++)
{
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(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();
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com