博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java代码内,获得jsp产生的html
阅读量:6880 次
发布时间:2019-06-27

本文共 1723 字,大约阅读时间需要 5 分钟。

hot3.png

        最近做了个事情,是要把数据导出到PDF上,我是通过拿到html,然后调用相关jar工具包导出成PDF的,那html又是jsp产生出来的,然后,就是怎么样在java中拿到jsp装入数据后产生的html了,我的代码如下:

        String url = "/jsp/" + tagPx + ".jsp";

        WebContext context = WebContextFactory.get();
        ServletContext sc = context.getServletContext();
        HttpServletResponse response = context.getHttpServletResponse();
        HttpServletRequest request = context.getHttpServletRequest();
        RequestDispatcher rd = sc.getRequestDispatcher(url);
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os,
                Constant.WEB_CHARSET));
        HttpServletResponse rep = new HttpServletResponseWrapper(response) {
            public PrintWriter getWriter() throws IOException {
                return pw;
            }
        };
        request.setAttribute("list", list);
        rd.include(request, rep);
        pw.flush();
        logger.debug("初始JSP输出html:\n" + os.toString(Constant.WEB_CHARSET));

        //接下来这段,是转PDF前对html的格式化处理,是我们的工具jar里面成产PDF时对html的要求,和文章题目无关

        InputStream is = new ByteArrayInputStream(os.toByteArray());
        Tidy tidy = new Tidy();
        ByteArrayOutputStream os2 = new ByteArrayOutputStream();
        tidy.setXHTML(true); // 设定输出为xhtml(还可以输出为xml)
        tidy.setCharEncoding(Configuration.UTF8); // 设定编码以正常转换中文
        tidy.setTidyMark(false); // 不设置它会在输出的文件中给加条meta信息
        tidy.setXmlPi(true); // 让它加上<?xml version="1.0"?>
        tidy.setIndentContent(true); // 缩进,可以省略,只是让格式看起来漂亮一些
        tidy.parse(is, os2);
        os.flush();
        String htmlString = os2.toString(Constant.WEB_CHARSET);
        os.close();
        pw.close();
        is.close();
        os2.close();
        logger.debug("pdf转换处理后html:\n" + htmlString);
        byte[] pdf = pdfManager.htmlToPDF(htmlString, topXleft);

        一定注意我代码中红色字部分,在我们项目内,是UTF-8,而且,红色字部分是必须的。之前因为没有红色字部分,差点被折磨死,因为线下开发时正确了,放到线上导出的PDF就是乱码。实在汗颜,这个问题折磨我好几天之后,我才发现了上面红色字部分的解决办法,将问题解决掉了。

转载于:https://my.oschina.net/sxgkwei/blog/99915

你可能感兴趣的文章
Python中的字符串
查看>>
我的友情链接
查看>>
org.tinygroup.tinydb-数据库开发组件
查看>>
IOS绘制一个简单的表格
查看>>
【跟我学Puppet】1.7 mco 配置amq的集群
查看>>
我的友情链接
查看>>
看完9个笑话 顿悟9个人生道理
查看>>
多节点CDN缓存加速系统wdcdn2.0.1版本发布
查看>>
判断一个数是否在二维数组中
查看>>
李帅将道访武当山,拜会李光富会长
查看>>
find命令
查看>>
windows下nodejs环境配置
查看>>
服务器上出现1069错误(由于登录失败而无法启动服务)解决方法
查看>>
PostgreSQL对现有,新建的表和视图授权给用户
查看>>
找出数字x的秩(小于或等于x的值的数目)
查看>>
【管理心得之四】很小的付出,便可收获最大的工作绩效
查看>>
我的友情链接
查看>>
eclipse出现Web项目无法选择用server运行及无法导出war包的问题
查看>>
我的友情链接
查看>>
Zabbix简单的入门应用
查看>>