火狐打印HTML 表格,不显示的问题

最近做项目,需要一个打印HTML的功能,遇到了一系列的问题

1.火狐,谷歌显示的表格 hTML显示 样式不一样,打印出来更加的不一样,都不知道要怎么调

2.火狐打印,文字显示 , 表格线 不显示

3.用lodop插件后,可以保证打印一样,可是图片会失真

4.如果用html2canvas 把网页保存为图片然后打印,图片也会失真,看起来有点模糊

属于是饶了一大圈过来,感觉什么路都走不通

直到最后,总算是让我找一个比较好的办法了

第一步 : 表格用word画出来

然后在网上找个工具,word在线生成网页,这个生成的网页是表格的,比自己写的兼容性好很多.

我用的是网站:http://www.docpe.com/word/word-to-html.aspx

第二步:样式问题

这里需要css配合好,不然会出现的问题也多 border-collapse: unset; 兼容火狐,一般用的border-collapse: collapse; 这玩意儿不兼容火狐

还有火狐不要固定宽度 width:575pt  , 这里我卡了好长时间

再记录一个问题,360兼容模式不支持外部样式引入,只支持本地样式

table {
            
            border-collapse: unset;
            /*border: 1px solid black;*/
            border-spacing: 0;
            border-top: 1px solid black;
            border-left: 1px solid black;
            /*border-left: 1px solid black;
            border-right: 1px solid black; */
            /*border-bottom: 1px solid black; */
        }
        /**
         * 两行合并在一起,会导致出现重叠的线
         */
        td {
            border-spacing: 0;
            border-right: 1px solid black; 
            border-bottom: 1px solid black;
/*            border-top: 1px solid #999;
            border-left: 1px solid #999;
            border-right: 1px solid #999; 
            border-bottom: 1px solid #999;*/
            /*border: 1px solid black; */
            vertical-align:middle;
            background-clip: padding-box;
        }

第三步:打印工具

打印工具的选择,我就是在这里采坑了,因为我用的jqprint 打印,火狐的表格线不出来,我就直接跑去用别的方法去了,

回头来看,TMD,这狗东西有问题,具体原因不知道,在css调好后,我用windos.print() 就能显示网格线

function doPrint() {     

        //取得浏览器的userAgent字符串

            var userAgent = navigator.userAgent.toLowerCase();

            if (userAgent.indexOf("trident") > -1 || userAgent.indexOf('msie') > -1) {

                alert("请使用google或者360浏览器打印");

                return false;

            }
     

            // 打印

            var bdhtml = window.document.body.innerHTML;//获取当前页的html代码

            var sprnstr = "<!--startprint-->";//设置打印开始区域

            var eprnstr = "<!--endprint-->";//设置打印结束区域

            var prnhtml = bdhtml.substring(bdhtml.indexOf(sprnstr) + 17); //从开始代码向后取html

            var prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));//从结束代码向前取html

            window.document.body.innerHTML = prnhtml;
            console.info("111111");
            window.print();

            /*            window.document.body.innerHTML = bdhtml;
            console.info("22222");*/
        }  

更新下,不是jqprint的问题,是因为我用jqprint的时候没有选中用引用样式,如果需要使用引用样式,要用下来这种写法,注意 media="screen,print"

<link href="./print.css" media="screen,print" rel="stylesheet" />

    $('#new_btn_print').bind('click', function() {

                alert("jprint打印");

                //只能渲染之后才能获取页面的高度
                var o = document.getElementById("printTable");
                var h = o.offsetHeight; //高度

                var w = o.offsetWidth; //宽度
                //alert("总高度="+h+"w="+w);
                //补足高度计算方法
          /*      var addheight = addCellHeight(h,cellHeight);
                $("#addcontent0").css("height",addheight);*/
                $('#printTable').jqprint({
                   debug: false, //如果是true则可以显示iframe查看效果(iframe默认高和宽都很小,可以再源码中调大),默认是false
                       importCSS: true, //true表示引进原来的页面的css,默认是true。(如果是true,先会找$("link[media=print]"),若没有会去找$("link")中的css文件)
                       printContainer: true, //表示如果原来选择的对象必须被纳入打印(注意:设置为false可能会打破你的CSS规则)。
                       operaSupport: true
                });
            });

 

打印结果

到此为止,基本算是满足需求了,剩下的就是为位置样式的调试,这玩意儿是真难调,HTML显示不一样,打印出来又一样,坑的要死

posted on 2022-04-27 10:42  手撕高达的村长  阅读(791)  评论(0编辑  收藏  举报

导航