uniapp调起打印机(调起第三方打印软件)适用app,将页面生成图片打印的两种方式

news/2024/11/15 8:24:36/

以下是封装的组件

html部分

 <view style="position: relative;width: 120px;height: 35px;overflow: hidden;">  <view class="test_btn" @click="canvas.createPoster">打印</view><canvas canvas-id="myCanvas" id="myCanvas" :style="{position:'absolute',width:canvasObj.width+'px',height:canvasObj.height+'px'}"></canvas></view>  

js

  1. app端是无法使用html2canvas, 因为,app端不支持浏览器js。
  2. 为了解决这个办法,我们可以引入renderjs,可以帮助我们在app端内使用浏览器对象
  3. 将页面内容生产图片有两种方式:
    1⃣️用html2canvas,
    2⃣️用截屏的方式,缺点是会截到多余的内容,具体实现方式看以下函数getScreen()里的内容
<script module="canvas" lang="renderjs">import html2canvas from 'html2canvas'; export default {data(){return {}},props:{element:{type:String}},methods: {createPoster(event, ownerInstance) {// 生成海报  const domObj = document.getElementById("content");html2canvas(domObj, {useCORS: true,logging: false,letterRendering: true,proxy: "http://oss.licai521.com/",    allowTaint:true, onclone(doc) {let e = doc.querySelector("#content");e.style.display = "block";},}).then(function (canvas) { var posterImg = canvas.toDataURL("image/png",1);ownerInstance.callMethod('creates', {	posterImg: posterImg})		}).catch(err => {console.log(err)})},}}
</script><script>  
import html2canvas from 'html2canvas'; 
export default {  data() {  return {  posterImg:""};  },  props:{canvasObj:{type:Object}},methods: {  //canvas生成图片creates(option){//这里就接收到了图片的路径。直接就可以拿到页面dom上去渲染了。this.posterImg=option.posterImg;// 获取页面上的canvas标签的canvas-idconst ctx = uni.createCanvasContext('myCanvas');// 绘制图片(背景图要首先绘制,不然会被遮盖)ctx.drawImage(this.posterImg, 0, 0,this.canvasObj.width,this.canvasObj.height);// 绘制整图ctx.draw(false, () => {// 把canvas生成为图片uni.canvasToTempFilePath({x:0,y:0,width: this.canvasObj.width,height:this.canvasObj.height,canvasId: 'myCanvas',success: (response) => {uni.saveImageToPhotosAlbum({filePath: response.tempFilePath,success: (response) => {console.log(response,"保存成功");//以图片的形式 分享到第三方appplus.share.sendWithSystem({pictures:[response.file]}, function(){console.log('分享成功');}, function(e){console.log('分享失败:'+JSON.stringify(e));});},fail: (response) => {uni.openSetting({success: (response) => {if(!response.authSetting['scope.writePhotosAlbum']) {nui.showModal({title: '提示',content: '获取权限成功,再次点击图片即可保存',showCancel: false})} else {nui.showModal({title: '提示',content: '获取权限失败,无法保存',showCancel: false})}}})}})},fail: (response) => {console.log(response);}})})},//截屏生成图片getScreen(){let pages = getCurrentPages();  let page = pages[pages.length - 1];  let ws = page.$getAppWebview();  let bitmap = new plus.nativeObj.Bitmap('drawScreen');  // 将webview内容绘制到Bitmap对象中  ws.draw(bitmap, () => {  // 保存图片到本地  bitmap.save("_doc/drawScreen.jpg", {  overwrite: true  }, res => {  uni.saveImageToPhotosAlbum({filePath: res.target,success: (res) => {uni.showToast({title: '保存成功'})},fail() {uni.showToast({icon: 'none',title: '保存名片码失败'})}})plus.share.sendWithSystem({content:"打印"}, function(){console.log('分享成功');}, function(e){console.log('分享失败:'+JSON.stringify(e));});bitmap.clear(); // 清除Bitmap对象  }, error => {  console.log(JSON.stringify(error)); // 保存失败信息  bitmap.clear(); // 清除Bitmap对象  });  // bitmap.clear(); // 清除Bitmap对象  }, error => {  console.log(JSON.stringify(error)); // 绘制失败  }, {  check: true, // 设置为检测白屏  });},//直接打开第三方软件(这里用的是printerShare软件,pname是借助第三方工具找到的 link2sdpluschszqmfb.apk)openPrint(){plus.runtime.launchApplication({pname: 'com.dynamixsoftware.printershare'  },  function(e) {  console.log('Open system default browser failed: ' + e.message);  }  );  let url="android.intent.action.VIEW"plus.runtime.openURL(url);  },}  
};  
</script>  

http://www.ppmy.cn/news/581419.html

相关文章

C# 控制TSC打印机功能

核心代码 public class PrinterHelper{/// <summary>/// 更新线程/// </summary>Thread m_Thread;/// <summary>/// 线程阻塞/// </summary>AutoResetEvent m_ResetEvent new AutoResetEvent(true);/// <summary>/// 是否工作/// </summary&…

1700打印机恢复出厂设置步骤

1700打印机恢复出厂设置步骤&#xff1a; 1 关电源开关 2 打开前面面板 3 按住取消和继续两个按钮&#xff0c;同时开电源开关&#xff0c;直到灯闪烁消失&#xff0c;停留在错误灯上 4 关面板[more] 来自 “ ITPUB博客 ” &#xff0c;链接&#xff1a;http://blog.itpub.net/…

C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)

C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机 支持并口,串口,网口,USB口,驱动方式等多种端口 支持开关钱箱 支持条码打印 SDK中支持的其他设备的控制(扫描枪等) 北洋SDK中只有VB和Delphi的例程&#xff0c;所以参照…

c 语言编写的一元二次方程的根,编写C#程序,计算一元二次方程ax^2+bx+c得实根

共回答了17个问题采纳率:82.4% using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace cacFC {class Program {static void Main(string[] args) {Console.WriteLine("请输入系数a"); double a=Convert.ToDoubl…

BLE4.0 实现蓝牙打印机

一 IOS 蓝牙介绍 蓝牙协议本身经历了从1.0到4.0的升级演变, 最新的4.0以其低功耗著称&#xff0c;所以一般也叫BLE(Bluetoothlow energy)。 iOS 有两个框架支持蓝牙与外设连接。一个是 ExternalAccessory。从ios3.0就开始支持&#xff0c;也是在iphone4s出来之前用的比较多的…

20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK

BarTender是一款优秀的条形码打印软件&#xff0c;可以支持很多种类型的条形码设计和打印&#xff0c;具体大家可参考他的官网&#xff08;Barcode and Label Making Software | BarTender&#xff09;&#xff0c;这里不多介绍。 本来在做SilverLight的东西的&#xff0c;后来…

怎么在Linux上安装打印机驱动

怎么在Linux上安装打印机驱动(以Ubuntu为例) 通常来说,你不需要手动在Linux上安装硬件驱动。系统会自动检测计算机硬件,然后自动为你安装驱动。但是,对于打印机,情况就不一样了。事实上,Linux是通过CUPS(Common Unix Printing System)处理打印服务。Apple是CUPS的主要…

打印机共享的设置方法

1、局域网打印共享 实现共享打印的操作大体分为两步&#xff0c;第一步如何实现打印机共享&#xff1b;第二步&#xff0c;如何寻找共享的打印机&#xff0c;并实现打印作业。 共享打印前请确认&#xff0c;共享者的电脑和使用者的电脑在同一个局域网内&#xff0c;同时该局域…