关于前端完成打印的几种方法

1,266 阅读2分钟

目前正在做浏览器端采用js方式实现打印这么一个功能,JS打印实现的方法很多,但是兼容各个浏览器实现打印预览的功能有些棘手,现将实现的内容及遇到的问题记录下来,希望有大牛看到所提的问题后可以给予解答,在此感谢啦。

1.JS实现打印的方式

方式一:window.print()

window.print();会弹出打印对话框,打印的是window.document.body.innerHTML中的内容,

方式二:采用document.execCommand(”print”)

该方式也兼容各个版本的浏览器,同window.print()一样,其启动的是打印对话框,chrome的打印对话框自带预览功能,但是IE、火狐仅仅只弹出打印设置对话框,没有预览功能。

方式三:采用JQuery插件使用jQuery浏览插件可以很方便的进行局部打印 jquery.print.js 下载地址:[github.com/DoersGuild/…]

$("#ElementId").print({
    globalStyles:true,//是否包含父文档的样式,默认为true
    mediaPrint:false,//是否包含media='print'的链接标签。会被globalStyles选项覆盖,默认为false
    stylesheet:null,//外部样式表的URL地址,默认为null

    noPrintSelector:".no-print",//不想打印的元素的jQuery选择器,默认为".no-print"
    iframe:true,//是否使用一个iframe来替代打印表单的弹出窗口,true为在本页面进行打印,false就是说新开一个页面打印,默认为true
    append:null,//将内容添加到打印内容的后面
    prepend:null,//将内容添加到打印内容的前面,可以用来作为要打印内容
    deferred:$.Deferred()//回调函数
    });

方式四:vue项目下载打印插件使用vue-print-nb浏览插件可以很方便的进行局部打印 vue-print-nb 地址:[www.npmjs.com/package/vue…]

Vue2 Version:

npm install vue-print-nb --save
import Print from 'vue-print-nb'
// Global instruction 
Vue.use(Print);

//or

// Local instruction
import print from 'vue-print-nb'

directives: {
    print   
}

Vue3 Version:

npm install vue3-print-nb --save
// Global instruction 
import { createApp } from 'vue'
import App from './App.vue'
import print from 'vue3-print-nb'
const app = createApp(App)
app.use(print)
app.mount('#app')

//or

// Local instruction
import print from 'vue3-print-nb'

directives: {
    print   
}

方式五:使用clodop云打印上述方法的缺陷就是无法完成自动打印,为了完成项目需求选择接入clodop clodop 地址:[www.lodop.net/]

//通过解析源码发现lodop支持低版本浏览器所以只能选择clodop
import { MessageBox } from 'element-ui'

// ====页面动态加载C-Lodop云打印必须的文件CLodopfuncs.js====

var head = document.head || document.getElementsByTagName('head')[0] || document.documentElement

var oscript = document.createElement('script')

// 让本机的浏览器打印(更优先一点):

oscript = document.createElement('script')

oscript.src = 'http://localhost:8000/CLodopfuncs.js?priority=2'

head.insertBefore(oscript, head.firstChild)

// 加载双端口(8000和18000)避免其中某个端口被占用:

oscript = document.createElement('script')

oscript.src = 'http://localhost:18000/CLodopfuncs.js?priority=1'

head.insertBefore(oscript, head.firstChild)
// 下载loadLodop

function loadLodop() {

    window.open('/static/CLodop_Setup_for_Win32NT.exe')

}
// ====获取LODOP对象的主过程:====

function getLodop() {

    var LODOP

    try {

        LODOP = getCLodop()

        if (!LODOP && document.readyState !== 'complete') {

            MessageBox.alert('C-Lodop打印控件还没准备好,请稍后再试!')

            return

        }

        return LODOP

    } catch (err) {

        if (navigator.platform == "Win32" || navigator.platform == "windows") {

            MessageBox.confirm('您还未安装打印控件,点击确定下载打印控件,安装成功后刷新页面即可进行打印', {

                confirmButtonText: '确认',

                cancelButtonText: '取消',

                type: 'warning'

            }).then(() => {
                loadLodop()
            })
        }
        else {
            return 'linux'
        }
    }
}
export { getLodop }
//操作过程中发现clodop对mac的支持性有问题只能将mac暂时剥离,大家可以提供解决方法

**方式五:使用光速云打印调研过程中发现的另一款云打印插件对mac支持性好但是是收费的

光速云打印

实现方式与clodop相似可以去官网直接阅览文档