JavaScript调用系统自带的打印页面

JavaScript调用系统自带的打印页面

export function printPdf(data: BlobPart,) {const blob = new Blob([data], { type: 'application/pdf' })let date = (new Date()).getTime()let ifr = document.createElement('iframe')ifr.style.frameborder = 'no'ifr.style.display = 'none'ifr.style.pageBreakBefore = 'always'ifr.setAttribute('id', 'printPdf' + date)ifr.setAttribute('name', 'printPdf' + date)ifr.src = window.URL.createObjectURL(blob)document.body.appendChild(ifr)doPrint('printPdf' + date)window.URL.revokeObjectURL(ifr.src) // 释放URL 对象
}function doPrint(val) {let ordonnance = document.getElementById(val).contentWindowconsole.log(ordonnance)setTimeout(() => {ordonnance.print()}, 100)
}

这两段代码是用于在网页中打印PDF文件的JavaScript函数。下面是每个函数的详细解释:

printPdf 函数

这个函数接收一个参数 data,这个参数应该是PDF文件的内容,类型为 BlobPartBlobPart 可以是 BlobFile 或者 ArrayBuffer 等类型,这里用于创建一个新的 Blob 对象,该对象代表PDF文件。

  1. 创建Blob对象

    const blob = new Blob([data], { type: 'application/pdf' })
    

    这行代码创建了一个新的 Blob 对象,其中包含PDF数据,并指定了MIME类型为 application/pdf

  2. 生成时间戳

    let date = (new Date()).getTime()
    

    获取当前时间的时间戳,用于生成唯一的ID。

  3. 创建iframe元素

    let ifr = document.createElement('iframe')
    

    创建一个 iframe 元素,用于在其中加载PDF文件。

  4. 设置iframe属性

    ifr.style.frameborder = 'no'
    ifr.style.display = 'none'
    ifr.style.pageBreakBefore = 'always'
    ifr.setAttribute('id', 'printPdf' + date)
    ifr.setAttribute('name', 'printPdf' + date)
    

    设置 iframe 的样式和属性,使其不可见,并且在页面中不会显示边框。同时,使用时间戳生成唯一的ID和名称。

  5. 设置iframe的src属性

    ifr.src = window.URL.createObjectURL(blob)
    

    使用 Blob 对象创建一个对象URL,并将其设置为 iframesrc 属性,这样 iframe 就会加载PDF文件。

  6. 将iframe添加到文档中

    document.body.appendChild(ifr)
    

    iframe 添加到文档的 body 中。

  7. 调用打印函数

    doPrint('printPdf' + date)
    

    调用 doPrint 函数,传入 iframe 的ID,用于打印PDF文件。

  8. 释放URL对象

    window.URL.revokeObjectURL(ifr.src)
    

    释放之前创建的对象URL,以释放内存。

doPrint 函数

这个函数接收一个参数 val,这个参数应该是 iframe 的ID。

  1. 获取iframe内容窗口

    let ordonnance = document.getElementById(val).contentWindow
    

    通过ID获取 iframe 元素,并获取其内容窗口。

  2. 打印PDF

    setTimeout(() => {ordonnance.print()
    }, 100)
    

    使用 setTimeout 延迟100毫秒后调用 iframe 内容窗口的 print 方法,以打印PDF文件。

总结

这两段代码的主要目的是在网页中创建一个隐藏的 iframe,用于加载PDF文件,并自动调用打印功能。这种方法可以在不显示PDF文件的情况下直接打印PDF内容。

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

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

相关文章

【数据结构】快排之三路划分

目录 一、前言 二、 快排性能的关键点分析 三、 三路划分基本思想 四、 思路分析 五、提醒 六、代码实现 一、前言 继续对快速排序的深入优化进行探讨 二、 快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后,key对数组的分割。 如果每次选key都能…

Kafka面试题解答(一)

1.kafka消息发送的流程? 生产者:在消息发送的过程中涉及到了两个线程:main线程和sender线程。在main线程中创建了一个双端队列RecordAccumulator(默认32m)。main线程将消息发送RecordAccumulator,sender线程不断地从R…

基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要:番茄成熟度检测在农业生产及质量控制中起着至关重要的作用,不仅能帮助农民及时采摘成熟的番茄,还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型,该模型使用了…

Oracle 数据库创建导入

注意:本教程中的有些命令您可能并不熟悉,但没关系,只需按照说明一步一步创建示例数据库即可。在之后的教程中,会详细介绍每个命令。 1.创建新用户并授予权限 1.1.打开 首先,启动 SQL plus 程序的命令行:…

为centos7分配ip

前提: 安装好centos7 编辑文件 进入编辑模式[dmdbalocalhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改 BOOTPROTOstatic DNBOOTyes IPADDR192.168.152.11 NETMASK255.255.255.0 GATEWAY192.168.152.2 DNS18.8.8.8 点击esc .输入“:wq” 保存退…

内网安全-代理技术-socket协议

小迪安全网络架构图: 背景:当前获取window7 出网主机的shell。 1.使用msf上线,查看路由 run autoroute -p 添加路由: run post/multi/manage/autoroute 使用socks模块开启节点,作为流量跳板 msf6 exploit(multi/ha…

如何使用.bat实现电脑自动重启?

1、在电脑桌面新建一个记事本文档,将如下内容写进去: echo off shutdown /r /t 02、然后,保存一下,再把桌面此文件重命名为电脑重启.bat 3、双击此程序,可以立刻重启电脑。 PS:① 此程序会不保存任何当前…

YOLOv11融合CVPR[2024]自适应扩张卷积FADC模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《Frequency-Adaptive Dilated Convolution for Semantic Segmentation》 一、 模块介绍 论文链接:https://arxiv.org/abs/2403.05369 代码…

Python 数据文件读写教程

Python 数据文件读写教程 在数据科学和软件开发中,文件的读写操作是至关重要的。Python 作为一门功能强大的编程语言,提供了多种方式来处理文件,包括文本文件、CSV 文件、JSON 文件等。在本教程中,我们将深入探讨 Python 中的数据…

模拟实现优先级队列

目录 定义 特点 构造函数 常用方法 关于扩容的问题 关于建堆的问题 向上调整和向下调整的比较 (向上调整)代码 (向下调整)代码 关于入队列和出队列问题 模拟实现优先级队列代码 关于堆排序的问题 堆排序代码 关于对…

Autosar CP DDS规范导读

Autosar CP DDS 主要用途 数据通信 中间件协议:作为一种中间件协议,DDS实现了应用程序之间的高效数据通信,能够在不同的软件组件和ECU之间传输数据,确保数据的实时性和可靠性。跨平台通信:支持在AUTOSAR CP平台上的不同…

数字IC实践项目(10)—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证(付费项目)

数字IC实践项目(10)—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证(付费项目) 前言项目框图1)DDR4 Verification IP2)DDR4 JEDEC Model & Tb 项目文件1)DDR4 Veri…

Jmeter中的监听器(三)

9--断言结果 功能特点 显示断言结果:列出所有断言的结果,包括通过和失败的断言。详细信息:显示每个断言的详细信息,如断言类型、实际结果和期望结果。错误信息:显示断言失败时的错误信息,帮助调试。颜色编…

人工智能大比拼(3)

已知x-,y-6,且下述表达式的值与x的取值无关,求y -10x2y7xy 上述这个很简单的数学题,可是在各家AI之间出现了争议,本期我使用了四个AI:kimi,商量,文心一言,chatyy 先来看一下kimi的表…

Xilinx Aurora 8B/10B IP介绍以及下板验证

文章目录 一、什么是Aurora协议?二、Aurora 8B/10B IP核的结构原理三、Aurora 8B/10B IP核 延迟开销四、用户数据接口格式4.1 AXI4-Stream 位排序4.2 帧传输用户端口说明4.3 帧传输数据流程4.4 Aurora 8B/10B 帧格式4.5 帧格式数据传输时序4.5.1 简单数据传输4.5.2 …

Redis8:商户查询缓存2

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

Camera Tuning中AE/AWB/AF基础知识介绍

3A定义 3A是Camera ISP控制算法的一个重要组成部分,通常分为自动曝光(AE)、自动聚焦(AF)、自动白平衡(AWB)三个组件。 自动曝光(Auto Exposure) AE基本概念 曝光概念…

数据库中的用户管理和权限管理

​ 我们进行数据库操作的地方其实是数据库的客户端,是我们在客户端将操作发送给数据库的服务器(MySQL的服务器是mysqld),由数据库处理之后发送回来处理结果(其实就是一种网络服务)。所以可以存在多个客户端…

ubuntu24.04安装matlab失败

又是摸鱼摆烂的一天,好难过~ 官方教程:https://ww2.mathworks.cn/help/install/ug/install-products-with-internet-connection.html 问题描述:https://ww2.mathworks.cn/matlabcentral/answers/2158925-cannot-install-matlab-r2…

Hive1.2.1与Hbase1.4.13集成---版本不兼容问题

hive与hbase集成失败,汗流夹背了吧老弟......哈哈哈哈,刷到这篇文章,那你可真是太幸运啦~ 常见错误一: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/h…