loadCLodop最好在页面加载完就调用
打印就调用getLodop
LodopFuncs.js 内容
//驱动
//https://scp-tcdn.sf-express.com/scp/soft/SCPPrint_Win32NT_6.570CN.exe
//或
var MainJS = "CLodopfuncs.js",
URL_WS1 = "ws://localhost:8000/" + MainJS,
URL_WS2 = "ws://localhost:18000/" + MainJS,
//+号改为://
URL_HTTP1 = "http+localhost:8000/" + MainJS,
URL_HTTP2 = "http+localhost:18000/" + MainJS,
URL_HTTP3 = "https+localhost.lodop.net:8443/" + MainJS,
LoadJsState;
function getCLodopJsState() {
return LoadJsState
}
function checkOrTryHttp() {
if (window.getCLodop) return LoadJsState = "complete", !0;
if ("loadingB" != LoadJsState && "complete" != LoadJsState) {
LoadJsState = "loadingB";
var t = document.head || document.getElementsByTagName("head")[0] || document.documentElement,
e = document.createElement("script"),
n = document.createElement("script"),
r = document.createElement("script");
e.onload = n.onload = r.onload = n.onerror = r.onerror = function() {
LoadJsState = "complete"
}, e.onerror = function(e) {
n.src = URL_HTTP2, t.insertBefore(n, t.firstChild)
}, "https:" !== window.location.protocol ? (e.src = URL_HTTP1, t.insertBefore(e, t.firstChild)) : (r.src = URL_HTTP3, t.insertBefore(r, t.firstChild))
}
}
export function getLodop() {
var t, e = "https://scp-tcdn.sf-express.com/scp/soft/SCPPrint_Win32NT_6.570CN.exe",
n = "<br><div class='scpprint-tips'>Web打印服务CLodop未安装启动,点击这里<a href=".concat(e, " target='_self'>下载执行安装</a>"),
r = "<br><div class='scpprint-tips'>Web打印服务CLodop需升级!点击这里<a href=".concat(e, " target='_self'>执行升级</a>"),
o = ",成功后请刷新本页面或重启浏览器。</div>";
try {
t = window.getCLodop()
} catch (t) {}
return t || "complete" === LoadJsState ? t ? CLODOP.CVERSION < "4.1.6.0" ? {
code: 3,
msg: r + o,
downloadUrl: e
} : (t.SET_LICENSES("xxxx", "A8014B09DC3900222D3047E9942A8F3504D", "xxxx", "EA15AFAF29B939797009E405CDEB043768A"), t.SET_LICENSES("THIRD LICENSE", "", "Sf Technology Co., Ltd.", "F5BD5E2D3083D6F7FA2FF6C5DFEB3740F52"), t) : {
code: 2,
msg: n + "<br>(若此前已安装过,可<a href='CLodop.protocol:setup' target='_self'>点这里直接再次启动</a>)" + o + "<br>注:xxx</br>",
downloadUrl: e
} : {
code: 4,
msg: "网页还没下载完毕,请稍等一下再操作。"
}
}
export function loadCLodop() {
LoadJsState = "loadingA", !window.WebSocket && window.MozWebSocket && (window.WebSocket = window.MozWebSocket);
try {
var WSK1 = new WebSocket(URL_WS1);
WSK1.onopen = function(t) {
setTimeout((function() {
checkOrTryHttp()
}), 200)
}, WSK1.onmessage = function(e) {
window.getCLodop || eval(e.data)
}, WSK1.onerror = function(e) {
var WSK2 = new WebSocket(URL_WS2);
WSK2.onopen = function(t) {
setTimeout((function() {
checkOrTryHttp()
}), 200)
}, WSK2.onmessage = function(e) {
window.getCLodop || eval(e.data)
}, WSK2.onerror = function(t) {
checkOrTryHttp()
}
}
} catch (t) {
checkOrTryHttp()
}
}
通过websocket下发打印
import {getLodop} from './LodopFuncs'
import {delExpress} from '@/api/api/order'
export function route(res){
if(res.type == '1'){
dy(res.data)
}
}
async function dy(data){
console.log(data)
var LODOP = await getLodop();
//设置打印机的名称
console.log(LODOP)
await LODOP.PRINT_INIT("PDF打印");
// await LODOP.SET_PRINTER_INDEX("http://localhost:8080/profile/upload/pdf/fm_76130_standard_YCMFSV33NQE9.pdf");
console.log(process.env.VUE_APP_BASE_API+data.url)
// await getFileBase64(process.env.VUE_APP_BASE_API+url).then(res => {
// LODOP.SET_PRINT_PAGESIZE(1, 0, 0, 'A7')//1为纵向 2为横向
// LODOP.ADD_PRINT_PDF(0, 0, '100%', '100%', res?.split('data:application/pdf;base64,')[1])
// // LODOP.ADD_PRINT_PDF(0,0,"100%","100%","Deli GE430-W");//打印机Deli GE430-W
// LODOP.PREVIEW();
// })
await LODOP.SET_PRINT_PAGESIZE(1, 0, 0, 'A7')//1为纵向 2为横向
await LODOP.SET_PRINTER_INDEX("Deli GE430-W");
await LODOP.ADD_PRINT_PDF(10,15,60,130,process.env.VUE_APP_BASE_API+data.url);//打印机Deli GE430-W
// await LODOP.ADD_PRINT_PDF(0,0,"100%","100%","Microsoft Print to PDF");
//打印预览
// LODOP.PREVIEW();
//打印
await LODOP.PRINT();
await delExpress({code:data.code});//删除队列中的第一个
}
/**
* 加载pdf 并转为base64
* @param {string} pdfUrl[pdf的链接]
*/
const getFileBase64 = async pdfUrl => {
let fileData = null
try {
fileData = await axios({
method: 'get',
url: pdfUrl, // 请求地址
responseType: 'blob' // 指明服务器返回的数据类型
})
} catch {
fileData = null
}
return new Promise((resolve, reject) => {
if (fileData && fileData.data) {
const file = new Blob([fileData.data], { type: 'application/pdf' })
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = () => resolve(reader.result)
reader.onerror = error => reject(error)
} else {
reject('文件读取错误')
}
})
}