天天看點

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{

            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;

                }

            };

            //執行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