使用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)寫上如下代碼
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXzUleNNzZE1EeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jN5kzN1kDNwEjNyYDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
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);
}
}
}
實作樣式
如果想生成table隻需要把jsp頁面運用table畫好就可取到