解决QRCode生成二维码打印不出

news2024/9/23 23:35:09

问题:二维码嵌入在页面中,打印时二维码不渲染的情况

解决方法:

       使用 html2canvas 库将指定的 DOM 元素(在这个例子中是 id 为 pdf 的元素)转换成一个画布(canvas),然后将这个画布转换成图片,创建一个不可见的 iframe 用于打印,将图片插入到 iframe 中并打印出。

解决代码:

import html2Canvas from 'html2canvas';

export const rootPrint = function (ref: any) {
  // alert("建议使用横向打印")
  // const WindowPrt: any = window.open(
  //   "",
  //   "打印",
  //   "width=" +
  //     (screen.availWidth - 10) +
  //     ",height=" +
  //     (screen.availHeight - 50) +
  //     ",left=0,top=0,location=0,menubar=0,toolbar=0,scrollbars=0,status=0" +
  //     '@page{ size: landscape; }'
  // ) // 裸全屏
  // WindowPrt.document.head.innerHTML = window.document.head.innerHTML // 加入当前所有头 - 以防样式丢失
  // WindowPrt.document.body.innerHTML = ref.innerHTML // 载入指定body
  // WindowPrt.print() // 调用打印
  // setTimeout(() => {
  //   WindowPrt.close() // 自动等待print结束后执行
  // }, 1000);
  // window.print()

  alert("建议使用横向打印");

  html2Canvas(document.querySelector('#pdf'), {
    allowTaint: true, //允许画布污染
    taintTest: false, //禁用污染测试
    useCORS: true, //允许加载跨域图片
    dpi: window.devicePixelRatio * 4, // 将分辨率提高到特定的DPI,提高四倍
    scale: 4, // 按比例增加分辨率
  }).then(function (canvas) {
    // 创建一个临时的img元素来展示canvas内容
    var img = new Image();
    img.src = canvas.toDataURL('image/jpeg', 1.0);

    // 调整图片尺寸以适应A4页面
    img.style.width = '794px';
    img.style.height = 'auto'; // 自动调整高度以保持比例
  
    // 创建一个不可见的iframe用于打印
    var iframe = document.createElement('iframe');
    iframe.style.position = 'absolute';
    iframe.style.width = '0px';
    iframe.style.height = '0px';
    iframe.style.border = 'none';
    document.body.appendChild(iframe);
  
    // 将图片插入到iframe中
    iframe.contentWindow.document.open();
    iframe.contentWindow.document.write('<style>@page { size: A4; margin: 0mm; }</style>'); // 设置页面为A4大小,无页边距
    iframe.contentWindow.document.write(img.outerHTML);
    iframe.contentWindow.document.close();
  
    // 延迟执行打印,确保图片完全加载
    setTimeout(() => {
      iframe.contentWindow.focus();
      iframe.contentWindow.print();
      document.body.removeChild(iframe); // 打印后移除iframe
    }, 1000);
  });
}

最终结果: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库系统原理练习 | 作业2-第2章关系数据库(附答案)

整理自博主本科《数据库系统原理》专业课完成的课后作业&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方&#xff0c;欢迎各位斧正。 专业课本&#xff1a; 目录 一、选择题 二、填空题 三、简答题 四、关系代数 1.课本p70页&…

嵌入式基础 接口协议汇总

在此收集整理嵌入式通信中常见的接口协议&#xff0c;它们具有一定的通用性&#xff0c;在今后的开发中会反复遇到。 包括但不限于以下类别&#xff08;逐步完善中…&#xff09;&#xff1a; GPIOUARTSPII2CUSBEthernetNAND Flash类SDRAM类&#xff08;ram-like&#xff09;LC…

拉取DockerHub镜像

参考博主&#xff1a;http://t.csdnimg.cn/i49ET 方法一&#xff08;不太行&#xff09;&#xff1a; 在daemon.json文件中添加一些国内还在服务的镜像站&#xff08;可能某些镜像会没有&#xff09; ([ -f /etc/docker/daemon.json ] || mkdir -p /etc/docker) && e…

Idea合并Git分支信息

#git 的笔记 ##本篇文章是通过Idea 实现git 命令操作的代码的上传与合并。 1.合并分支 点击 Git 选择Merge 这里选择合并远程的分支

火山引擎数据飞轮实践:在电商场景中,如何建设全链路数据血缘?

数据作为新型生产要素&#xff0c;正支撑企业的数智化转型。但企业数字化建设也存在管理成本高、数据产品使用门槛高、数据资产价值不够的问题&#xff0c;其原因在于业务和数据之间没有形成双向良性驱动。 结合新时代企业数字化转型需求&#xff0c;火山引擎基于字节跳动十余…

【HTML入门】第十课 - 表格,也就是table标签

这一小节&#xff0c;我们说一下HTML中的表格。比如我们常常看见的学生成绩单&#xff0c;比如excel一个单元格一个单元格的&#xff0c;这些都是表格。 表格的标签名是 table 。 目录 1 表格中的一些子标签 1.1 表头区域 1.2 表格内容区域 1.3 行和列 2 实战一小下 2.…

Matlab提取excel数据及处理的实操举例

实现目的 当excel数据量庞大的时候&#xff0c;如果采用人工处理数据的方法就会成为非常出力不讨好的事&#xff0c;既容易出错&#xff0c;又容易抑郁。 利用matlab处理成为既简单又高效的方式。 例如&#xff0c;以GD32F7xx系列的管脚复用表格为例&#xff0c;在169x19的e…

[Linux]对Linux中的命令的本质

上回我们讲了Linux的指令&#xff0c;本篇是一个短篇&#xff0c;主要是对命令本质的讲解。 我们知道命令一般都是直接使用的 而可执行程序需要加上当前的路径 &#xff08;这个mytest是我们上上回写的&#xff0c;作用实际是打印Hello world!&#xff09; 我们很直观的可以发…

Stable Diffusion 保姆级实战教程!学不会来打我!

前言 本教程没有难懂的理论&#xff0c;全是实操的截图&#xff0c;非常通俗易懂。 能够帮你在最短的时间里&#xff0c;掌握Stable Diffusion的核心操作方法。真正有效地提高工作的效率。 教程主要是讲我们在工作中高频使用的4个功能模块&#xff1a;文生图、图生图、后期处…

kind kubernetes(k8s虚拟环境)使用本地docker的镜像

kubernetes中&#xff0c;虽然下载镜像使用docker&#xff0c;但是存储在docker image里的镜像是不能被k8s直接使用的&#xff0c;但是kind不同&#xff0c;可以使用下面的方法&#xff0c;让kind kubernetes环境使用docker image里的镜像。 kind – Quick Start 例如&#x…

fastadmin 如何通过权限组来控制列的显示与隐藏

方法1 以版本控制(application/admin/controller/Version.php)为例子 需求 就是在有时候,有些列不想让这个权限组的人看到,只给制定的权限组的人看 1.给权限组创建一个字段 ALTER TABLE lt_auth_group ADD COLUMN isBoothView TINYINT(1) NOT NULL DEFAULT 0 AFTER statu…

安卓查看本地sqlite数据库的好用工具(亲测好用)

1.使用SQLiteStudio工具&#xff0c;可以很方便的查看&#xff1b; 2.下载SQLiteStudio。 SQLiteStudio下载链接&#xff1a;https://pan.baidu.com/s/1Ji6xkhYxrWP8pDk6qba_Og 3.SQLiteStudio使用。 2.将数据库文件从项目中导入本地 3.用工具打开存在本地的数据库 4.可以…

DNS的解析过程(知识点总结)

DNS的解析过程(知识点总结)_dns解析过程-CSDN博客

企业专利布局怎么弄

企业专利布局策略与实施 在当今竞争激烈的商业环境中&#xff0c;企业的专利布局已成为保护创新成果、提升市场竞争力的重要手段。专利布局不仅是技术创新的体现&#xff0c;更是企业战略布局的重要一环。 一、企业专利布局的策略 多维度布局 企业专利布局应结合市场、技术、…

旷视AI开源新突破:上传照片即可生成表情包视频!

日前&#xff0c;旷视科技发布了一项新的开源AI人像视频生成框架——MegActor。该框架让用户只需输入一张静态肖像图片和一段视频&#xff08;如演讲、表情包、rap&#xff09;&#xff0c;便可生成一段表情丰富、动作一致的AI人像视频。生成的视频长度取决于输入的视频长度。与…

keepalived安装使用

keeepalived介绍 Keepalived的作用是检测服务器的状态&#xff0c; 如果有一台web服务器宕机&#xff0c;或工作出现故障&#xff0c;Keepalived将检测到&#xff0c;并将有故障的服务器从系统中剔除&#xff0c;同时使用其他服务器代替该服务器的工作&#xff0c;当服务器工作…

PostgreSQL行级安全策略探究

前言 最近和朋友讨论oracle行级安全策略(VPD)时&#xff0c;查看了下官方文档&#xff0c;看起来VPD的原理是针对应用了Oracle行级安全策略的表、视图或同义词发出的 SQL 语句动态添加where子句。通俗理解就是将行级安全策略动态添加为where 条件。那么PG中的行级安全策略是怎…

【Linux】信号量和线程池

目录 一、POSIX信号量 二、基于环形队列和信号量的生产消费模型 三、线程池 一、POSIX信号量 POSIX信号量&#xff08;POSIX Semaphores&#xff09;是一种进程间或线程间同步机制&#xff0c;它允许进程或线程以协调的方式访问共享资源或进行其他形式的同步。与System V信…

用MATLAB绘制三向应力圆

% 定义主应力值 sigma1 100; % MPa sigma2 50; % MPa sigma3 -33; % MPa sigma_m1(sigma1 sigma3)/2; sigma_m2(sigma1 sigma2)/2; sigma_m3(sigma2 sigma3)/2; % 计算半径 r1 (sigma1 - sigma3) / 2; r2 (sigma1 - sigma2) / 2; r3 (sigma2 - sigma3…

2024年16个适合现代应用程序的最佳API网关

什么是API&#xff1f; API是一个软件解决方案&#xff0c;作为中介&#xff0c;使两个应用程序能够相互交互。以下一些特征让API变得更加有用和有价值&#xff1a; 遵守REST和HTTP等易于访问、广泛理解和开发人员友好的标准。API不仅仅是几行代码&#xff1b;这些是为移动开…