先上效果图
测试了 IE11 chrome firefox 都阔以
上核心代码
- public class Server extends NoSessionIDService {
-
- @Override
- public String actionOP() {
- return "pdf";
- }
-
- @Override
- public void process(HttpServletRequest req, HttpServletResponse res, String op) throws Exception {
- String sid = WebUtils.getHTTPRequestParameter(req, "sid");
- HttpSession session = req.getSession(true);
- //将同一个前端的预览请求任务缓存在一起
- Map<String,ViewTask> vtsk = (Map) session.getAttribute("PDFSID");
- if( null == vtsk ){
- vtsk = new HashMap<String,ViewTask>();
- session.setAttribute("PDFSID",vtsk);
- }
- if( StringUtils.isEmpty(sid) ){
- //获取要预览的模板
- String cpt = getCptPath(req);
- //生成计算模板用的参数表
- Map parameters = getParameters(req);
- //注册任务,生成sid
- sid = registerTask( vtsk, cpt,parameters);
- //得到最终预览的URL
- String url = getURL(sid);
- //得到网页的标题
- String title = getWebTitle(cpt,parameters);
- //转换成网页输出
- String html = "<!doctype html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>"
- + title
- + "</title></head><body style=\"position: absolute;overflow: hidden;padding: 0;margin: 0;width: 100%;height: 100%;\">"
- + "<iframe style=\"width: 100%;height: 100%;position: absolute;border: none;\" src=\""
- + url
- + "\"></iframe></body></html>";
- PrintWriter write = res.getWriter();
- write.print(html);
- write.flush();
- write.close();
- return;
- }
- ViewTask tsk = vtsk.get(sid);
- //初始化pdf页面数据
- PageSetProvider pages = initOutPages(res,tsk) ;
- //借助PDF导出输出内容
- PDFExporterProcessor exporter = PDFExporterFactory.getPDFExporter(true);
- OutputStream out = res.getOutputStream();
- exporter.export(out, pages);
- out.flush();
- out.close();
- }
- }
复制代码 都配有注释~就不多说了~核心就是转换成pdf输出到前端~
|