• 导出网页内容


    折腾了一天的导出报表工作,最终还是用了jspdf插件,路程虽为坎坷,但是学习了不少。

    首先,页面中有表格,有echart图表,初步尝试jspdf 导出会有部分缺失,失败了。考虑用

    window.print(),虽然原始,但是很好用。

    优点:1、有滚动条,滚动条以下内容也可打印。

             2、打印出来排版正常,样式不会丢失。

    缺点:eachart 图表,没能被打印。(样例代码如下)

    <html>
        <head>
        <title>div print</title>
    </head>
    <body>
    <input name="b_print" type="button" class="ipt"   onClick="printdiv('div_print');" value=" Print ">
    <div id="div_print" style="height: 200px;overflow:auto; ">
    <div style="height: 500px;">
        <h1 style="Color:Red">The Div content which you want to print</h1>
        <img src="12.jpg" alt=""/>
        <img src="12.jpg" alt=""/>
    </div>
    </div>
    </body>
        <script language="javascript">
            function printdiv(printpage)
            {
                var headstr = "<html><head><title></title></head><body>";
                var footstr = "</body>";
                var newstr = document.all.item(printpage).innerHTML;
                var oldstr = document.body.innerHTML;
                document.body.innerHTML = headstr+newstr+footstr;
                window.print();
                document.body.innerHTML = oldstr;
                return false;
            }
        </script>
    </html>
    

      解决echart图表未被打印问题,也就是在打印之前将echart图表,转换为图片,还好echart有接口可以实现。

    define(function(require,exports,module){
        function printReport(param){
        var $imgBox = $("#img-box_"+param.chartBox);
        var $chartBox = $("#"+param.chartBox);
        if ($imgBox.length <= 0) {
            $chartBox.after('<div id="img-box_'+param.chartBox+'"></div>');
            $imgBox = $("#img-box_"+param.chartBox);
        }
        // 将echart生成图片并放入img-box,并显示图片img-box
        var mychart=param.chartObj;
        $imgBox.html('<img src="' + mychart.getDataurl() + '"/>').css('display','block');
        // 隐藏echart图chart-box
        $chartBox.css('display','none');
        // 调整img大小
        var $img = $imgBox.find('img');
        var imgWidth = $img.width();
        var showWidth = "500"; // 显示宽度,即图片缩小到的宽度
        if (imgWidth > showWidth) { // 只有当图片大了才缩小
            var imgNewHeight = $img.height() / (imgWidth / showWidth);
            $img.css({'width': showWidth + 'px', 'height': imgNewHeight + 'px'});
        }
    }
    exports.printReport = printReport;
    });
    /**调用时传参数,echart对象,echart初始化的div的id */
    var param={
        chartObj:echart,
        chartBox:"myechartId"
    }

      非常完美的将图表转换为了图片!然后打印,OK!可以问题又来了,为毛它打印出来,说什么就是不分页了呢?只要超出一页部分就不可以打印了。呜呜。。。。

    继续解决不分页的问题:

    <html>
    <head>
        <title>无标题文档</title>
        <script language="javascript">
            //打印代码
            function Print()
            {
                var printStr ="<html><head><title></title></head><body>";
                var content = "";
                var str = document.getElementById('page1').innerHTML;     //获取需要打印的页面元素 ,page1元素设置样式page-break-after:always,意思是从下一行开始分割。
                content = content + str;
                str = document.getElementById('page2').innerHTML;     //获取需要打印的页面元素
                content = content + str;
                printStr = printStr+content+"</body></html>";
                var pwin=window.open("Print.htm","print"); //如果是本地测试,需要先新建Print.htm,如果是在域中使用,则不需要
                pwin.document.write(printStr);
                pwin.document.close();                   //这句很重要,没有就无法实现
                pwin.print();
            }
        </script>
    </head>
    
    <body >
    <div><input type="button" value="打印" onclick="Print()" /></div>
    <div id="page1">
        <table width="100%"  border="0" cellpadding="0" cellspacing="0"  style="page-break-after:always" >
            <tr><td>第一页打印内容</td></tr>
        </table>
    </div>
    <div id="page2">
        <table width="100%"  border="0" cellpadding="0" cellspacing="0" id="content" >
            <tr><td>第二页打印内容</td></tr>
        </table>
    </div>
    </body>
    </html>
    

      完美的分页了。然而,兴高采烈的用到项目中。。。。。。尼玛! 我的表格样式怎么没有了!!!

         好吧,若页面图表打印,无复杂样式打印,window.print() 还是个不错的选择,然而,需求是导出报表,好像不太一样啊!

         下篇继续研究jspdf 导出。

  • 相关阅读:
    像画笔一样慢慢画出Path的三种方法(补充第四种)
    占位符行为 PlaceHolderBehavior 的实现以及使用
    WPF实现物理效果 拉一个小球
    WPF实现Twitter按钮效果
    WPF自适应可关闭的TabControl 类似浏览器的标签页
    WPF仿百度Echarts人口迁移图
    WPF绘制简单常用的Path
    51Nod 1534 棋子游戏
    数论基础
    Buy a Ticket
  • 原文地址:https://www.cnblogs.com/caolidan/p/6936969.html
Copyright © 2020-2023  润新知