【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

2024-03-25 1482阅读

温馨提示:这篇文章已超过376天没有更新,请注意相关的内容是否还可用!

步骤

1. 下载 Print.js 插件

 npm install print-js --save

2.main.js文件中导入 Print.js 插件

  import print from 'print-js'

页面使用

需求:打击打印按钮,文字内容以及表格中的内容

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

vue Print.js打印页面样式不出现

解决方案

加上这句就好了!完美!

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

tips 特别注意:打印问题总结

一、因为表格数据过多,之前加了表格滚动条,但是打印出来 会把表格上的滚动条也打印出来,所以这里改成了 给弹框加滚动条,去掉表格中的滚动条

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

二、表格的列缺失(element-ui table组件)

2.1 原因: table-layout: fixed导致的,出现部分列没有被打印

让表table布局更加符合预期,普通使用table时,其table-layout 默认值是 auto,导致表格第二行和第一行不一样宽,也就是两行的宽度不对齐。而使用:

table { table-layout: fixed; }

则会让表的布局以第一行为准,设置表格的宽度,然后其他行的表格宽度就按照第一行为准。一般表格第一行是表头标题,第二行以后是数据行,也就是让数据行的每列宽度向第一行列宽度看齐。

这种样式的表格布局在性能上也快得多,这是因为整个表格的内容不需要花费进行分析,以便知道列的宽度。

解决方法:

   >>>table {
    table-layout: auto !important;
}
>>>.el-table__header-wrapper .el-table__header {
    width: 100% !important;
}
>>>.el-table__body-wrapper .el-table__body {
    width: 100% !important;
}

注意点:

>>>table {
    table-layout: auto !important;
}

可能会造成样式错乱,比如你页面有table,打印弹出层的table,这样修改样式有可能会导致页面表格行错位,解决办法:在页面的标签上加id或者class,比如table-d,修改less样式如下

.table-d>>>table {
    table-layout: auto !important;
}
.table-d>>>.el-table__header-wrapper .el-table__header {
    width: 100% !important;
}
.table-d>>>.el-table__body-wrapper .el-table__body {
    width: 100% !important;
}

2.2、打印内容缺失(print.js/print-js独有,固定高度导致)

原因:一般为了好看,会固定高度,然后超出内容出现滚动条,但是打印的时候,只会打印固定高度的内容,导致打印内容缺失

解决方法:

    @media print {        #box{            height: 100%;        }    }

或者这样:

找到print.js的getStyle方法,加入一行代码

str += "html,body,div{height: auto !important;}";getStyle: function () {        var str = "",            styles = document.querySelectorAll('style,link');        for (var i = 0; i  

注意点:

1、box是你固定高度标签的id,当然你也可以换成class或者其他,使样式生效即可

2、@media print只影响打印的样式,不会影响页面样式

3、表格内容缺失(表格滚动导致,只打印显示区域内容)

原因:不管是print.js还是vue-print-nb插件,都有这个问题,因为表格滚动导致

解决方法:

用一个隐藏div包裹你要打印的表格或者还有其他内容,总体包裹

注意点:

1、经过测试,A4纸大小宽度大致在650px,所以你隐藏的table列,要自己设置宽度,整体宽度在750左右,大于750,列会超出,不打印,小于750,右边会留有空白

2、不能固定高度,所以不要设置高度

2.3、不能分页

原因:不管你是下载print.js保存到本地,还是npm下载print-js,只能打印一页,可能太菜了

解决方法:

使用插件:vue-print-nb,使用方法:vue-print-nb

此插件会根据打印内容的高度,自己分页,如果想自定义分页的话,方法如下:

1、在末尾的最后一个标签,加入样式 style=“page-break-after: always;”

我是本页的末尾哦

2、定义打印样式,原理同上,但是方便需要,只需要统一定义class即可

@media print {        @page{            size:  auto;            margin: 3mm;        }        .footer {page-break-after: always;}}

完整代码

   
            
                {{ $t("storagePos.print") }}
            
          
            
{{ $t("NeoLight.demandNo") }}:{{ detailOrderNo }}
{{ $t("workOrder.workNo") }}:{{ detailso }}
{{ $t("dialog.line") }}:{{ detailLine }}
{{ $t("NeoLight.empty") }} {{ $t("storagePos.yes") }}

methods

  //打印
        printDetail() {
            printJS({
                printable: 'printJS-form', //打印区域
                type: 'html',  //打印类型html,还可以是json,image等,详细写法见官网
                targetStyles: ['*'],  //css样式,写成*代表打印样式完全继承你页面的样式
                maxWidth: 1100, //打印界面最大宽度,适当调整可以解决打印页面过宽,显示不完整的问题
                scanStyle: false
            })
        },

样式代码

    
@media print {
        #box {
            height: 100%;
        }
    }


.table-d>>>table {
    table-layout: auto !important;
}
.table-d>>>.el-table__header-wrapper .el-table__header {
    width: 100% !important;
}
.table-d>>>.el-table__body-wrapper .el-table__body {
    width: 100% !important;
}
.showAll_dialog {
    clear: both;
}
// 修改对话框高度
.showAll_dialog {
    overflow: hidden;
    ::v-deep .el-dialog {
        margin: 0 auto !important;
        height: 80%;
        overflow: hidden;
        background-color: black;
        .el-dialog__body {
            position: absolute;
            left: 0;
            top: 54px;
            bottom: 0;
            right: 0;
            padding: 0;
            z-index: 1;
            overflow: hidden;
            overflow-y: auto;
            // 下边设置字体,我的需求是黑底白字
            color: #ffffff;
            line-height: 30px;
            padding: 0 15px;
        }
    }
}

打印结果

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

参考文章链接:https://yuucn.com/a/128568.html

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]