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)写上如下代码

html/jsp利用iText生成pdf

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);
        }
    }
}

实现样式

html/jsp利用iText生成pdf

html/jsp利用iText生成pdf

如果想生成table只需要把jsp页面运用table画好就可取到

html/jsp利用iText生成pdf