html/jsp利用iText生成pdf
使用iText生成pdf,遇到了很多问题,今天总结一下 一共两种方式,一种是在本地测试的一种是在服务器生成的。
本地测试的
Document document = new Document();
String html = ServletUtils.forward(request,response,"a.jsp");System.out.print(html);
response.setContentType("application/pdf");
OutputStream os = response.getOutputStream();
//初始化 pdf输出对象 PdfWriter
PdfWriter writer = PdfWriter.getInstance(document, os);
document.open();
XMLWorkerHelper.getInstance().parseXHtml(writer, document,
new ByteArrayInputStream(html.getBytes("Utf-8")),
Charset.forName("UTF-8"));
document.close();
os.flush();
os.close();
os=null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
如果出现中文不显示或者乱码需要在生成的jsp页(a.jsp)写上如下代码
servletUtils工具类
public class ServletUtils {
public static String forward(HttpServletRequest request, HttpServletResponse response, String src) {
try{
/* ↓↓↓↓↓重新构造response,修改response中的输出流对象,使其输出到字节数组↓↓↓↓↓ */
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
final ServletOutputStream servletOuputStream = new ServletOutputStream() {
public void write(int b) throws IOException {
byteArrayOutputStream.write(b);
}
public boolean isReady() {
return false;
}
public void setWriteListener(WriteListener writeListener) {
}
};
final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream, "UTF-8"));
response = new HttpServletResponseWrapper(response) {
public ServletOutputStream getOutputStream() {
return servletOuputStream;
}
public PrintWriter getWriter() {
return printWriter;
}
};
/* ↑↑↑↑↑↑重新构造response,修改response中的输出流对象,使其输出到字节数组↑↑↑↑↑↑ */
//执行forward操作
request.getRequestDispatcher(src).forward(request,response);
//把字节流中的内容太转为字符串
return new String(byteArrayOutputStream.toByteArray(),"utf-8");
}
catch (Exception e){
throw new RuntimeException(e);
}
}
}
实现样式
如果想生成table只需要把jsp页面运用table画好就可取到