因项目的需要,近几天看了看itext生成PDF文档。
生成文档基本为5个步骤。
1,初始化Document对象,:Document document = new Document();
2,配置PDF的输出流:PdfWriter.getInstance(document,FileOutputStream("fileName"));
3,打开Docuement对象:document.open();
4,添加数据进入document对象中:document.add(elements);
5,关闭document对象:document.closed();
官方文档中有itext与servlet的集成,是用户能够在页面中打开PDF文档,目前项目使用struts2,因此参照官方文档使用struts2实现。
action :
public String getPdf(){
Document document = new Document();
ByteArrayOutputStream byOut = new ByteArrayOutputStream();
PdfWriter.getInstance(document,byOut);
document.open();
document.add(elements)://添加数据.
document.closed();
ActionContext context = ActionContext.getContext();
HttpServletResponse response = (HttpServletResponse)context.get(ServletActionContext.HTTP_RESPONSE);
response.setContentType("application/pdf");
response.setContentLength(byOut.size());
ServletOutputStream out = response.getOutputStream();
byout.writeTo(out);
return SUCCESS;
}
JSP:
在页面头<%@page %>中增加import="java.io.*,com.lowagie.text.*,com.lowagie.text.pdf.*"//itext
session = "false"
<%
Document document = new Document();
ByteArrayOutputStream byOut = new ByteArrayOutputStream();
PdfWriter.getInstance(document,byOut);
document.open();
document.add(elements);//添加数据
ServletOutputStream outs = response.getOutputStream();
DataOutput output = new DataOutputStream(outs);
byte[] bytes = buffer.toByteArray();
response.setContentLength(bytes.length);
for (int i = 0; i < bytes.length; i++) {
output.writeByte(bytes[i]);
}
out.clear(); //
out=pageContext.pushBody();//
%>
如果只需要下载后台生成的PDF文档,与正常的下载文件差不多。
将action中的:
ActionContext context = ActionContext.getContext();
HttpServletResponse response = (HttpServletResponse)context.get(ServletActionContext.HTTP_RESPONSE);
response.setContentType("application/pdf");
response.setContentLength(byOut.size());
ServletOutputStream out = response.getOutputStream();
byout.writeTo(out);
修改为 this.inputStream = new ByteArrayInputStream(byOut.toByteArray());//inputStream为下载文件时的文件流程。